Как отобразить вывод данных с плавающей запятой с 2 ​​десятичными знаками в Java? - PullRequest
161 голосов
/ 29 марта 2010

Могу ли я сделать это с System.out.print?

Ответы [ 14 ]

213 голосов
/ 29 марта 2010

Вы можете использовать метод printf, например:

System.out.printf("%.2f", val);

Короче говоря, синтаксис %.2f указывает Java возвращать вашу переменную (val) с двумя десятичными знаками (.2) в десятичном представлении числа с плавающей запятой (f) от начала спецификатор формата (%).

Есть и другие символы преобразования, которые вы можете использовать, кроме f:

  • d: десятичное целое число
  • o: восьмеричное целое
  • e: с плавающей точкой в ​​научной нотации
162 голосов
/ 29 марта 2010

Вы можете использовать DecimalFormat. Один из способов его использования:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

Другой способ - создать его в формате #.##.

Я считаю, что все параметры форматирования менее читабельны, чем вызов методов форматирования, но это вопрос предпочтений.

78 голосов
/ 05 мая 2012

Я бы предложил использовать String.format () , если вам нужно значение как String в вашем коде.

Например, вы можете использовать String.format() следующим образом:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
36 голосов
/ 29 марта 2010
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
15 голосов
/ 15 декабря 2016
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
9 голосов
/ 29 марта 2010

Многие люди упомянули DecimalFormat. Но вы также можете использовать printf, если у вас последняя версия Java:

System.out.printf("%1.2f", 3.14159D);

См. Документацию по Formatter для получения дополнительной информации о строке формата printf .

8 голосов
/ 11 августа 2014

Простой трюк - создать более короткую версию вашей переменной, умножив ее, например, на. 100, округлить и снова разделить на 100.0. Таким образом, вы генерируете переменную с 2 десятичными знаками :

double new_variable = Math.round(old_variable*100) / 100.0;

Этот "дешевый трюк" всегда был достаточно хорош для меня и работает на любом языке (я не Java, просто изучаю его).

6 голосов
/ 17 октября 2014
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

Выход составляет 22,35. Если вам нужно 3 десятичных знака, измените его на "% .3f".

6 голосов
/ 29 марта 2010

Посмотрите на Десятичный формат

Вот пример из учебника:

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);

Если вы выберете шаблон типа "###. ##", вы получите два десятичных знака, и я думаю, что значения округлены в большую сторону. Вы захотите просмотреть ссылку, чтобы получить точный формат, который вы хотите (например, хотите ли вы конечные нули)

3 голосов
/ 31 октября 2018

Ниже приведен код, как вы можете отобразить вывод данных с плавающей запятой с 2 ​​десятичными разрядами в Java:

float ratingValue = 52.98929821f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
...