繁体   English   中英

java格式的小数百分比会产生非常奇怪的行为

[英]Format fractional percent in java yields very strange behaviour

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

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

我认为这是浮动的实习代表的结果。 (以二进制数表示的十进制数)。

您的0.145可能在内部表示为0.144999999999 ...,因此舍入模式向下舍入。

您应该阅读每个计算机科学家应该知道的关于浮点运算的内容 ,但基本上它归结为.145不能在IEEE浮点中精确表示,因此四舍五入到可以表示的最接近的值,恰好小于.145,因此在四舍五入为两位数时会四舍五入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM