DecimalFormat 未根据 Half_Even 舍入给出结果
DecimalFormat Not Giving Result as per Half_Even Rounding
我正在尝试四舍五入到小数点后一位。下面是代码片段。
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。请帮助我理解这种行为。
double 对于许多十进制值都有一个小的表示错误,这包括 4.65,它实际上比看起来略高。
System.out.println(new BigDecimal(4.65));
打印
4.6500000000000003552713678800500929355621337890625
除了 Peter's Lawrey 的回答之外,您还可以尝试传递给 decimalFormat.format()
方法 BigDecimal(String val)
以确保传递准确的值:
String formattedNumber = decimalFormat.format(new BigDecimal("4.65"));
System.out.println(formattedNumber);
您将得到 4.6
的输出。
我正在尝试四舍五入到小数点后一位。下面是代码片段。
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。请帮助我理解这种行为。
double 对于许多十进制值都有一个小的表示错误,这包括 4.65,它实际上比看起来略高。
System.out.println(new BigDecimal(4.65));
打印
4.6500000000000003552713678800500929355621337890625
除了 Peter's Lawrey 的回答之外,您还可以尝试传递给 decimalFormat.format()
方法 BigDecimal(String val)
以确保传递准确的值:
String formattedNumber = decimalFormat.format(new BigDecimal("4.65"));
System.out.println(formattedNumber);
您将得到 4.6
的输出。