DecimalFormat不按照Half_Even舍入给出结果

时间:2016-11-21 10:39:32

标签: java decimalformat

我想要舍入到小数点后1位。以下是代码段。

DecimalFormat decimalFormat = new DecimalFormat("#0.#");
String formattedNumber = decimalFormat.format(4.65d);
System.out.println(formattedNumber);

输出
4.7

根据DecimalFormat javadoc,其默认舍入为HALF_EVEN。按照这个规则,4.65应该四舍五入到 4.6 。但是,它的输出为 4.7 。请帮助我理解这种行为。

2 个答案:

答案 0 :(得分:3)

对于许多十进制值,double有一个小的表示错误,这包括4.65,实际上略高于它出现的。

System.out.println(new BigDecimal(4.65));

打印

4.6500000000000003552713678800500929355621337890625

答案 1 :(得分:1)

除了Peter的Lawrey回答,您可以尝试传递给decimalFormat.format()方法BigDecimal(String val)以确保传递确切的值:

String formattedNumber = decimalFormat.format(new BigDecimal("4.65"));
System.out.println(formattedNumber);

您将获得4.6的输出。