Java 8 DecimalFormat提供不一致的输出

时间:2016-08-10 11:21:26

标签: java java-8 format

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中也不一致。我做错了什么?

1 个答案:

答案 0 :(得分:4)

根据问题评论的建议,您的观察结果是由您的数字文字被解释为double值而导致的,这些值可能无法准确表示,例如,

System.out.println(new BigDecimal(4.4805).toString());

生成

4.48050000000000014921397450962103903293609619140625

然后四舍五入为4.481,因为刚刚过去 4.4804.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")));