2009-11-10 2 views
1

Я хочу иметь значение с плавающей запятой 3 цифры цифры после цифры, я не хочу округлять значение например: float f = 2.13275; i want f as 2.132 not 2.133 Как я могу это сделать в java?усечение плавающего значения java

+0

печати округленное значение, или изменяя само значение? оба ответа ответили на эти вопросы. –

ответ

1

Используйте класс DecimalFormat.

+0

Его наилучшая возможная вещь, я думаю. –

+0

Не будет ли это решение круглым, а не усеченным? – Asaph

+0

@Asaph, вы можете использовать различные режимы округления, включая RoundingMode.FLOOR или RoundingMode.DOWN. –

1

Math.floor() будет отрубать что-либо после десятичной точки без округления. Вы можете сыграть трюк, в котором вы умножаетесь на соответствующий порядок величины, выровняете результат и затем делите на тот же порядок величины. Например:

double f = 2.13275; 
double f2 = Math.floor(f * 1000)/1000; 

Примечание: класс Math имеет дело в двухместных, а не плавающих. Если вы действительно хотите поплавки, вы можете сделать кастинг, но будет некоторая потеря точности. С другой стороны, вам нужно только 3 десятичных разряда, поэтому вы, вероятно, не будете возражать.

Редактировать: @Jason S указывает, что отрицательные числа могут иметь последнее место после запятой. Я не уверен, хотите ли вы этого или если это даже актуально в контексте вашего кода. Но если это так, то вокруг него есть несколько способов. Одним из них является использование Math.ceil() для числа случае отрицательном:

double f2 = (f < 0 ? Math.ceil(f * 1000) : Math.floor(f * 1000))/1000; 

Да, я знаю, это становится немного грязным. Но это иллюстрирует суть.

+1

отлично работает для положительных чисел. если вы хотите отрубить без округления для отрицательных чисел, вам нужно использовать усечение, а не пол, или принять абсолютное значение внутри Math.floor() и затем умножить на знак исходного номера. –

+1

@ Джейсон С: Хорошая мысль о отрицательных числах. – Asaph

+0

Привет, он работает для положительных значений, но он не работает для нагативных значений поплавка. – sanjana

0

Использование DecimalFormat с setRoundingMode (RoundingMode.FLOOR)

+1

Но это не сработает для отрицательных чисел. – Asaph

1

Не был бы (INT) (е * 1000) /1000.0 работы? Это кажется мне более ясным, чем другие предложения.

+0

Это действительно та же концепция, что и решение Math.floor(). Во всяком случае, OP нуждается в том, чтобы он работал для отрицательных чисел, и этот ответ не учитывает это требование. – Asaph

+0

Он должен делать правильные вещи с отрицательными числами. Это была моя точка зрения. –

+0

Я только что проверил это, и он имеет правильное поведение.Я был уверен, что кастинг для int выполняется усечением, а не округлением. –

0

Как упоминалось ранее, Вы можете использовать DecimalFormat

DecimalFormat df= new DecimalFormat("##.###"); //##.### определяет формат, который вы хотите

String temp=df.format(var_name); 
Смежные вопросы