我正在尝试使用以下代码格式化百分比:
NumberFormat fmt = NumberFormat.getPercentInstance();
fmt.setRoundingMode(RoundingMode.HALF_UP);
fmt.setMinimumFractionDigits(0);
fmt.setMaximumFractionDigits(0);
System.out.println(fmt.format(0.145));
然而,我得到了一个非常奇怪的结果:
14%
将值 0.145 更改为其他值,例如 0.125 将正常工作并且结果将符合预期
13%
有人可以阐明这一点吗?提前致谢
最佳答案
这是由于 double
中固有的舍入误差,导致 0.145
被舍入为
0.1449999999999999900079927783735911361873149871826171875
如果您期望完美的准确性,请使用 BigDecimal
。
关于java - 在 Java 中格式化小数百分比会产生非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9264569/