Как напечатать поплавок с двумя десятичными знаками в Java?

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


person via_point    schedule 29.03.2010    source источник


Ответы (17)


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

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

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

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

  • d: десятичное целое число
  • o: восьмеричное целое
  • e: число с плавающей запятой в экспоненциальном представлении
person Anthony Forloney    schedule 29.03.2010
comment
Пожалуйста, будьте осторожны, так как String.format зависит от вашей текущей локальной конфигурации, вы можете не получить точку в качестве разделителя. Лучше использовать String.format(java.util.Locale.US,"%.2f", val); - person Gomino; 02.03.2016
comment
@gomino Почему бы не Locale.FRANCE? - person erickson; 27.05.2016
comment
@erickson во Франции десятичным разделителем является запятая, а не точка. - person Gomino; 27.05.2016
comment
@гомино Точно. Так зачем же ставить точки в числах для французских пользователей? - person erickson; 27.05.2016
comment
Я добавил этот комментарий в качестве напоминания, чтобы предупредить людей, которые ожидают, что в качестве разделителя всегда будет точка. - person Gomino; 27.05.2016
comment
@gomino Это имеет смысл, но я думаю, что предпочтение жесткого кодирования Locale.US заходит слишком далеко. Если вам нужно жестко закодировать нейтральную локаль для складывания регистра, рендеринга чисел и т. д., укажите Locale.ROOT. Это подходит для текста, который будет потребляться другой программой, а не отображаться для пользователей-людей. Для текста, представленного пользователю, учитывайте его языковой стандарт, независимо от того, указал ли он его явно или по умолчанию. - person erickson; 27.05.2016

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

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

Другой — построить его в формате #.##.

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

person Bozho    schedule 29.03.2010
comment
Что случилось с синтаксисом System.out.printf("%.2f", value)? Это все еще вокруг? - person Anthony Forloney; 29.03.2010
comment
Это. это все еще вариант - вы можете восстановить свой ответ;) - person Bozho; 29.03.2010
comment
Похоже, это мой вариант, так как я еще не знаю, как использовать DecimalFormat :) Спасибо! - person via_point; 29.03.2010
comment
Я давно не занимался обширной работой с Java, и когда я продолжал видеть DecimalFormat ответов, я сразу подумал, что ошибаюсь, но спасибо за разъяснение. - person Anthony Forloney; 29.03.2010
comment
как я могу вернуть значение с плавающей запятой из этого значения, например: float roundofDecimal (float dd) { DecimalFormat df = new DecimalFormat (); df.setMaximumFractionDigits (2); System.out.println(df.format(dd)); вернуть df.format (дд); } - person CoronaPintu; 01.07.2013
comment
Для меня это более полезный ответ, чем все, что связано с System.out, поскольку я не вывожу свой вывод на терминал, а скорее в графический интерфейс. Спасибо +1 голос от меня. - person James T Snell; 23.10.2013
comment
добавьте df.setMinimumFractionDigits(2);, чтобы заставить две цифры - person Terel; 20.03.2014

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

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

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
person John P.    schedule 04.05.2012
comment
%.02f и %.2f это одно и то же - person Borzh; 06.04.2015

Вы можете использовать эти быстрые коды ниже, которые изменились в конце. Добавьте, сколько нулей относится к после точки

float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");  
y1 = Float.valueOf(df.format(y1));

Переменная y1 раньше была равна 0,123456789. После кода превращается только в 0.12.

person Bay    schedule 15.09.2019
comment
Он не отображает 0 перед точкой. Это должно быть DecimalFormat df = new DecimalFormat(0.00); - person Ridhuvarshan; 21.02.2020
comment
Точно! DecimalFormat(0.00) тоже подойдет! Отличное место. - person Bay; 22.02.2020

float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

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

person Aldin Philo    schedule 17.10.2014

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

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

Дополнительную информацию о строка формата printf.

person Mr. Shiny and New 安宇    schedule 29.03.2010

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

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

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

person Birk    schedule 11.08.2014
comment
Это неправильно, многие числа будут повторять числа в представлении с плавающей запятой после деления на 100. Следовательно, не два десятичных знака. - person matt; 29.03.2016

Посмотрите DecimalFormat.

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

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

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

person Uri    schedule 29.03.2010

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

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

Чтобы напечатать число с плавающей запятой до 2 знаков после запятой в Java:

    float f = (float)11/3;
    System.out.print(String.format("%.2f",f));

ВЫХОД: 3,67

› используйте %.3f до трех знаков после запятой.

person Ayush Aryan    schedule 11.02.2021

OK - str для плавания.

package test;

import java.text.DecimalFormat;

public class TestPtz {
  public static void main(String[] args) {
    String preset0 = "0.09,0.20,0.09,0.07";
    String[] thisto = preset0.split(",");    
    float a = (Float.valueOf(thisto[0])).floatValue();
    System.out.println("[Original]: " + a);   
    a = (float) (a + 0.01);

    // Part 1 - for display / debug
    System.out.printf("[Local]: %.2f \n", a);
    // Part 2 - when value requires to be send as it is
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(2);
    df.setMaximumFractionDigits(2);
    System.out.println("[Remote]: " + df.format(a));

  }
}

Вывод:

run:
[Original]: 0.09
[Local]: 0.10 
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
person Community    schedule 05.06.2012

Одна проблема, которая занимала меня в течение часа или больше, на DecimalFormat- Он по-разному обрабатывает двойные и плавающие входы. Не помогло даже изменение RoundingMode. Я не эксперт, но подумал, что это может помочь кому-то вроде меня. Вместо этого использовал Math.round. Увидеть ниже:

    DecimalFormat df = new DecimalFormat("#.##");
    double d = 0.7750;
    System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
    float f = 0.7750f;
    System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
    // change the RoundingMode
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
    System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));

Вывод:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
person user2984447    schedule 15.05.2019

небольшая простая программа для демонстрации:

import java.io.*;
import java.util.Scanner;

public class twovalues {

    public static void main(String args[]) {

        float a,b;
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter Values For Calculation");

        a=sc.nextFloat();
        b=sc.nextFloat();

        float c=a/b;
        System.out.printf("%.2f",c);
    }
}
person Pavan vadrevu    schedule 27.05.2016

Просто выполните String str = System.out.printf("%.2f", val).replace(",", ".");, если вы хотите, чтобы независимо от локали пользователя вы всегда получали/отображали "." как десятичный разделитель. Это необходимо, если вы не хотите, чтобы ваша программа зависла, если вы позже сделаете какое-то преобразование, например float f = Float.parseFloat(str);

person Paul Efford    schedule 10.04.2018

Попробуй это:-

private static String getDecimalFormat(double value) {

    String getValue = String.valueOf(value).split("[.]")[1];

      if (getValue.length() == 1) {
          return String.valueOf(value).split("[.]")[0] +
                "."+ getValue.substring(0, 1) + 
                String.format("%0"+1+"d", 0);
       } else {
          return String.valueOf(value).split("[.]")[0]
            +"." + getValue.substring(0, 2);
      }


 }
person Nathani Software    schedule 17.08.2019
comment
Для получения дополнительной информации: - makecodesimpleandeasy.blogspot .com/2019/08/ - person Nathani Software; 17.08.2019

person    schedule
comment
Привет, Кевин, если ввести 10.0000, я получу только 10. Если я хочу отобразить 10.00, то как мне это сделать? - person Mdhar9e; 26.08.2014
comment
@Mdhar9e используйте DecimalFormat df = new DecimalFormat("0.00"); - person K.Sopheak; 28.12.2016

person    schedule
comment
В зависимости от локали вы можете получить запятую. Если вам нужен разделитель точек, используйте это: DecimalFormat(#.##, DecimalFormatSymbols(Locale.US)) - person DPM; 15.09.2017