Java 十进制四舍五入模式:将0.165(半偶数)四舍五入到小数点后2位,四舍五入到0.17?
代码如下:Java 十进制四舍五入模式:将0.165(半偶数)四舍五入到小数点后2位,四舍五入到0.17?,java,Java,代码如下: public static void main(String[] args) { formatNumber("##.##", 0.125); formatNumber("##.##", 0.165); } public static void formatNumber(String pattern, double value) { formatter.applyPattern(pattern);
public static void main(String[] args) {
formatNumber("##.##", 0.125);
formatNumber("##.##", 0.165);
}
public static void formatNumber(String pattern, double value) {
formatter.applyPattern(pattern);
String formattedNumber = formatter.format(value);
System.out.println("Number:" + value + ", Pattern:" +
pattern + ", Formatted Number:" +
formattedNumber);
}
我得到了这个输出
Number:0.125, Pattern:##.##, Formatted Number:0,12
Number:0.165, Pattern:##.##, Formatted Number:0,17
我知道默认情况下它使用半偶数舍入模式。
例如,5.5四舍五入为6,6.5四舍五入为6。
但是,如果我在小数点后有超过1个数字,那么这个规则是如何应用的呢。我不明白。提前感谢您的时间。四舍五入规则仍然正确应用,但一开始看起来并非如此。这显示为“0.17”,因为0.165不能精确表示为浮点
双精度;表示的值略高于0.165
数字0.125
可以精确表示(2-3),因此它可以正确地向下舍入到0.12
进行显示
但数字0.165
似乎只应该向下舍入
System.out.println(Long.toHexString(Double.doubleToLongBits(0.165)));
十六进制表示法为
3fc51eb851eb851f
尾数是最后13个十六进制数字,这建立了重复的十六进制“51eb8”,但最后一个十六进制数字向上舍入为“f”,因此浮点表示的值略大于实际的数学数字0.165。因此,它被四舍五入显示为“0.17”