如何在Java中打印保留两位小数的浮点数?

249

我能用System.out.print吗?

18个回答

338
你可以使用 printf 方法,像这样:
System.out.printf("%.2f", val);
简而言之,%.2f 语法告诉 Java 在格式说明符 (%) 的开始处返回变量 (val) 的浮点数十进制表示,并保留两位小数点 (.2)。除了 f 以外,还有其他的转换字符可供使用:
  • d: 十进制整数
  • o: 八进制整数
  • e: 科学计数法表示的浮点数

29
请注意,String.format 方法的输出结果取决于您当前的本地语言配置,可能不会使用点作为分隔符。建议使用 String.format(java.util.Locale.US,"%.2f", val); 来确保输出格式的正确性。 - Gomino
3
为什么不使用Locale.FRANCE - erickson
4
为什么在数字中加点以供法国用户使用? - erickson
1
我添加了这个注释作为提醒,警告那些期望始终有点作为分隔符的人。 - Gomino
10
这有道理,但我认为将硬编码的Locale.US作为“首选”太过了。如果您需要硬编码一个“中性”的区域设置用于大小写折叠、数字呈现等操作,请指定Locale.ROOT。这适用于将被另一个程序使用而不是呈现给人类用户的文本。对于展示给用户的文本,要尊重他们的语言环境,无论他们是明确指定的还是默认值。 - erickson
显示剩余2条评论

216

您可以使用DecimalFormat。其中一种使用方法如下:

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

另一种方法是使用 #.## 格式构造它。

我发现所有格式选项都比调用格式化方法难以阅读,但这只是个人偏好。


12
System.out.printf("%.2f", value)语法发生了什么?它还在使用吗? - Anthony Forloney
7
它仍然是一个选项 - 你可以取消删除你的答案 ;) - Bozho
看起来这是我的选择,因为我还不知道如何使用DecimalFormat :) 谢谢! - via_point
这对我来说比围绕System.out的东西更有用,因为我不是将输出转储到终端,而是转储到GUI中。谢谢你,我给你投了一票。 - James T Snell
12
请在代码中添加 df.setMinimumFractionDigits(2); 以强制保留两位小数。 - Terel
显示剩余2条评论

102

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

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

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);

18
"%.02f" 和 "%.2f" 是同样的东西。 - Borzh

44
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

5
嗨,Kevin。如果我输入了10.0000,只会显示为10。如果我想要显示为10.00,应该怎么做? - Mdhar9e
3
使用DecimalFormat df = new DecimalFormat("0.00");语句。该语句用于创建一个格式化数字的对象,其输出将保留两位小数。 - K.Sopheak

19
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24

4
根据所在地区的不同,可能会使用逗号作为分隔符。如果你想要使用点作为分隔符,请使用以下代码:DecimalFormat("#.##", DecimalFormatSymbols(Locale.US))。 - DPM

12
您可以使用下面的快速代码,它会在末尾自动更改自己。在小数点后添加多少个零,就添加多少个。

您可以使用下面的快速代码,它会在末尾自动更改自己。在小数点后添加多少个零,就添加多少个。

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

在代码执行前,变量y1的值为0.123456789。在代码执行后,它只剩下了0.12


2
它不会在小数点前显示0。应该是DecimalFormat df = new DecimalFormat("0.00"); - Ridhuvarshan
当然可以!DecimalFormat("0.00")也可以使用!很好的发现。 - Bay

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

输出为22.35。 如果需要保留三位小数,请将其更改为"%.3f"。


9
一个简单的技巧是通过将变量乘以例如 100,进行四舍五入并再次除以 100.0 来生成一个较短的版本。这样可以生成一个具有2个小数位的变量:
double new_variable = Math.round(old_variable*100) / 100.0;

这个“小技巧”对我来说一直很好用,而且适用于任何语言(我不是Java专业人士,只是在学习它)。

2
这是错误的,当你除以100时,许多数字将在浮点表示中重复出现,因此不会保留两位小数。 - matt

9

很多人提到了DecimalFormat。但是如果你有最新版本的Java,也可以使用printf

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

请查看有关格式化程序的文档,以获取有关printf格式字符串的更多信息。 (点击此处)

8
在Java中打印保留两位小数的浮点数:
    float f = (float)11/3;
    System.out.print(String.format("%.2f",f));

输出结果: 3.67

> 使用%.3f表示小数点后三位。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接