Я хочу иметь значение с плавающей запятой 3 цифры цифры после цифры, я не хочу округлять значение например: float f = 2.13275; i want f as 2.132 not 2.133 Как я могу это сделать в java?усечение плавающего значения java
ответ
Используйте класс DecimalFormat.
Его наилучшая возможная вещь, я думаю. –
Не будет ли это решение круглым, а не усеченным? – Asaph
@Asaph, вы можете использовать различные режимы округления, включая RoundingMode.FLOOR или RoundingMode.DOWN. –
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;
Да, я знаю, это становится немного грязным. Но это иллюстрирует суть.
отлично работает для положительных чисел. если вы хотите отрубить без округления для отрицательных чисел, вам нужно использовать усечение, а не пол, или принять абсолютное значение внутри Math.floor() и затем умножить на знак исходного номера. –
@ Джейсон С: Хорошая мысль о отрицательных числах. – Asaph
Привет, он работает для положительных значений, но он не работает для нагативных значений поплавка. – sanjana
Использование DecimalFormat с setRoundingMode (RoundingMode.FLOOR)
Но это не сработает для отрицательных чисел. – Asaph
Не был бы (INT) (е * 1000) /1000.0 работы? Это кажется мне более ясным, чем другие предложения.
Это действительно та же концепция, что и решение Math.floor(). Во всяком случае, OP нуждается в том, чтобы он работал для отрицательных чисел, и этот ответ не учитывает это требование. – Asaph
Он должен делать правильные вещи с отрицательными числами. Это была моя точка зрения. –
Я только что проверил это, и он имеет правильное поведение.Я был уверен, что кастинг для int выполняется усечением, а не округлением. –
Как упоминалось ранее, Вы можете использовать DecimalFormat
DecimalFormat df= new DecimalFormat("##.###");
//##.### определяет формат, который вы хотите
String temp=df.format(var_name);
печати округленное значение, или изменяя само значение? оба ответа ответили на эти вопросы. –