JDK 8
DecimalFormat x = new DecimalFormat("0.000");
System.out.println(x.format(4.4804));
System.out.println(x.format(4.4805));
System.out.println(x.format(4.5805));
System.out.println(x.format(4.5804));
输出
4.480
4.481
4.580
4.580
我知道JDK7 bug。但即使在JDK 8中也不一致。我做错了什么?
答案 0 :(得分:4)
根据问题评论的建议,您的观察结果是由您的数字文字被解释为double
值而导致的,这些值可能无法准确表示,例如,
System.out.println(new BigDecimal(4.4805).toString());
生成
4.48050000000000014921397450962103903293609619140625
然后四舍五入为4.481
,因为刚刚过去 4.480
和4.481
之间的中间点。如果将代码示例调整为
DecimalFormat x = new DecimalFormat("0.000");
System.out.println(x.format(new BigDecimal("4.4804")));
System.out.println(x.format(new BigDecimal("4.4805")));
System.out.println(x.format(new BigDecimal("4.5805")));
System.out.println(x.format(new BigDecimal("4.5804")));