Ant*_*ney 230

您可以使用此printf方法,如下所示:

System.out.printf("%.2f", val);
Run Code Online (Sandbox Code Playgroud)

简而言之,%.2f语法告诉Java 从格式说明符()的开头以浮点数val(.2)的十进制表示形式返回带有2个小数位()的变量f(%).

除此之外,您还可以使用其他转换字符f:

  • d:十进制整数
  • o:八进制整数
  • e:科学记数法的浮点数

  • 请小心,因为String.format取决于您当前的本地配置,您可能不会得到一个点作为分隔符.首选使用`String.format(java.util.Locale.US,"%.2f",val);` (11认同)
  • @gomino这是有道理的,但我认为"喜欢"硬编码"Locale.US"太过分了.如果您需要硬编码"中性"区域设置以进行大小写折叠,数字渲染等,请指定"Locale.ROOT".这适用于将由另一个程序使用的文本,而不是为人类用户呈现的文本.对于呈现给用户的文本,请尊重他们的区域设置,无论是明确指定还是默认. (6认同)
  • @gomino 为什么不是`Locale.FRANCE`? (3认同)
  • @gomino完全正确.那你为什么要为法国用户加点数? (3认同)

Boz*_*zho 169

你可以用DecimalFormat.一种使用方法:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Run Code Online (Sandbox Code Playgroud)

另一个是使用#.##格式构造它.

我发现所有格式化选项的可读性都低于调用格式化方法,但这是一个偏好问题.

  • `System.out.printf("%.2f",value)`语法怎么了?还在吗? (10认同)
  • 添加`df.setMinimumFractionDigits(2);`强制两位数 (9认同)
  • 它是.它仍然是一个选项 - 你可以取消删除你的答案;) (6认同)

Joh*_* P. 84

如果您需要在代码中使用值,我建议使用String.format()String.

例如,您可以String.format()按以下方式使用:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
Run Code Online (Sandbox Code Playgroud)

  • "%.02f"和"%.2f"是一回事 (13认同)

Kev*_*tre 37

double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
Run Code Online (Sandbox Code Playgroud)

  • 嗨凯文,如果输入10.0000,我只得到10.如果我想显示10.00那我该怎么办? (4认同)
  • @Mdhar9e 使用`DecimalFormat df = new DecimalFormat("0.00");` (3认同)

Pha*_*inh 16

float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
Run Code Online (Sandbox Code Playgroud)

  • 根据区域设置,您可能会得到一个逗号.如果你想要一个点分隔符,请使用:DecimalFormat("#.##",DecimalFormatSymbols(Locale.US)) (4认同)

Bay*_*Bay 12

您可以使用下面的快速代码,该代码在最后自行更改。在点后添加多少个零作为参考

float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");  
y1 = Float.valueOf(df.format(y1));
Run Code Online (Sandbox Code Playgroud)

变量 y1之前等于0.123456789。在代码之后它只变成0.12

  • 该点之前不显示 0。它应该是 DecimalFormat df = new DecimalFormat("0.00"); (2认同)

Mr.*_* 安宇 9

很多人都提到过DecimalFormat.但是printf如果您有最新版本的Java,也可以使用它:

System.out.printf("%1.2f", 3.14159D);
Run Code Online (Sandbox Code Playgroud)

有关printf格式字符串的更多信息,请参阅Formatter上的文档.


小智 8

一个简单的技巧是通过将变量乘以例如100四舍五入并100.0再次将其除以来生成变量的较短版本.这样生成一个带有2个小数位的变量:

double new_variable = Math.round(old_variable*100) / 100.0;
Run Code Online (Sandbox Code Playgroud)

这个"便宜的技巧"对我来说总是足够好,并且可以用任何语言工作(我不是Java人,只是学习它).

  • 这是错误的,许多数字在除以 100 后将以浮点表示形式重复数字。因此不是两位小数。 (2认同)

Uri*_*Uri 6

看看DecimalFormat

以下是教程中的示例:

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);
Run Code Online (Sandbox Code Playgroud)

如果你选择像"###.##"这样的模式,你会得到两个小数位,我认为这些值是四舍五入的.您将需要查看链接以获得所需的确切格式(例如,是否需要尾随零)


小智 6

float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
Run Code Online (Sandbox Code Playgroud)

输出为22.35.如果需要3个小数点,请将其更改为"%.3f".


Kes*_*era 5

以下是在Java中如何显示带小数点后两位的浮点数据输出的代码:

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


小智 5

在 Java 中打印最多 2 个小数位的浮点数:

    float f = (float)11/3;
    System.out.print(String.format("%.2f",f));
Run Code Online (Sandbox Code Playgroud)

输出:3.67

> 使用%.3f最多保留三个小数位。