在java中将浮点值截断到小数点后两位

Posted

技术标签:

【中文标题】在java中将浮点值截断到小数点后两位【英文标题】:Truncate Float value up to two decimal point in java 【发布时间】:2017-07-04 18:59:33 【问题描述】:
DecimalFormat hisFormat = new DecimalFormat("########.##");
hisFormat.setRoundingMode(RoundingMode.DOWN);

Float x=12345678.12345f;
System.out.println("Float Value " + hisFormat.format(x));

上面的代码打印“浮点值”为 12345678 我需要12345678.12

我怎样才能得到我的结果?请告诉我。

【问题讨论】:

将你的数字乘以 100。四舍五入。除以 100,然后打印。 @LuudvanKeulen 那是wrong way to do it。 @LuudvanKeulen 浮点数存储在 base-2 中,而不是 base-10 中,因此乘法会引入舍入误差,这通常会产生不正确的结果。 这不是真正的重复。该值打印为12345678 的原因是floats 不能保持13 位有效数字的精度。如果x5678.1234,您确实会看到5678.12 打印出来。如果您需要超过 8 位左右的有效数字精度,则应使用 double @LuudvanKeulen 要证明它是错误的,请参阅here。 【参考方案1】:

使用Double而不是Float,否则会丢失精度

DecimalFormat hisFormat = new DecimalFormat("######.##");
hisFormat.setRoundingMode(RoundingMode.DOWN);
Double x = 12345678.12345;
System.out.println("Float Value " + hisFormat.format(x));

使用Float结果为12345678

使用Double结果为12345678.12

【讨论】:

根据我的要求,我将只获得 Float 值。

以上是关于在java中将浮点值截断到小数点后两位的主要内容,如果未能解决你的问题,请参考以下文章

Java:对double值进行四舍五入,保留两位小数的几种方法

如何在 C# 中将数字四舍五入到小数点后两位?

将双值截断到小数点后6位。

Spark Java 将数据帧中的每个值四舍五入到小数点后两位。

java的计算保留N位小数点问题

C语言编程序时怎么控制浮点型输出的小数点精确到几位