【发布时间】:2016-01-11 15:50:50
【问题描述】:
我发现使用显示的十进制格式和舍入模式会出现一些值的意外行为
double b = 123.135;
//double b = 1896.675;
//double b = 523.135;
DecimalFormat df = new DecimalFormat(".##");
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(b);
String a = df.format(b);
System.out.println(a);
double roundOff = Math.round(b * 100.0) / 100.0;
System.out.println(roundOff);
生产:
123.135
123.14
123.14
我认为这是正确的。
使用此值时:1896.675 会产生以下结果:
1896.675
1896.67
1896.68
我认为出乎意料 - 我在这里做错了什么?
【问题讨论】:
-
设置 BigDecimal bd = new BigDecimal(b);并打印 bd 结果为 1896.674999999999954525264911353588104248046875 我猜这接近存储的实际值。
标签: java double precision decimalformat