java - 在 Java 中格式化小数百分比会产生非常奇怪的行为

标签 java number-formatting

我正在尝试使用以下代码格式化百分比:

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/

相关文章:

matlab - 是否可以在 MATLAB 中以非工程格式显示数字?

没有零的 Swift 货币样式

java - 命名查询和继承

java - 需要将exe文件转换成JAR文件

c++ - 为什么 setprecision( ) 在一个数字中给我两个单独的小数点?

javascript - Intl.NumberFormat 货币 : $US currency symbol?

java - 从枚举填充 Swing JComboBox

java - 未为 jar 文件设置 777 权限

Java 第二个框架不显示

java - 数字格式