【发布时间】:2021-04-27 02:20:09
【问题描述】:
我在尝试将双精度数舍入到小数点后 2 位时看到一些奇怪的行为
下面是代码
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setRoundingMode(RoundingMode.HALF_EVEN);
double f1 = 100.845;
double f2 = 1440.845;
System.out.println( df.format(f1));
System.out.println( df.format(f2));
这个输出
100.84
1,440.85
我期望第一个值是 100.85。
当我进一步研究它时,我发现了以下内容
101.845 --> 100.84
102.845 --> 102.84
103.845 --> 103.84
.
.
255.845 --> 255.84
**256.845 --> 256.85**
257.845 --> 256.85
.
.
我认为这一定与精度有关,因为从 0.84 到 .85 的切换发生在 255(2^8 -1)左右。但是,我没有计算这个值(至少在这个示例代码中没有)。
谁能解释为什么会这样?
谢谢
【问题讨论】:
标签: java decimalformat rounding-error