gpt4 book ai didi

java - 为什么 HALF_UP 有时会四舍五入加倍?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:39 24 4
gpt4 key购买 nike

以下代码:

double doubleValue = 1713.6;
float floatValue = 1713.6f;
String fs = "%-9s : %-7s %-7s\n";
System.out.printf( fs, "", "double", "float" );

DecimalFormat format = new DecimalFormat("#0");
System.out.printf( fs, "toString", String.valueOf( doubleValue ), String.valueOf( floatValue ) );

format.setRoundingMode( RoundingMode.DOWN );
System.out.printf( fs, "DOWN", format.format( doubleValue ), format.format( floatValue ) );

format.setRoundingMode( RoundingMode.HALF_DOWN );
System.out.printf( fs, "HALF_DOWN", format.format( doubleValue ), format.format( floatValue ) );

format.setRoundingMode( RoundingMode.HALF_UP );
System.out.printf( fs, "HALF_UP", format.format( doubleValue ), format.format( floatValue ) );

format.setRoundingMode( RoundingMode.UP );
System.out.printf( fs, "UP", format.format( doubleValue ), format.format( floatValue ) );

产生结果(live code):

          : double  float  
toString : 1713.6 1713.6
DOWN : 1713 1713
HALF_DOWN : 1714 1714
HALF_UP : 1713 1714 <--- notice this line
UP : 1714 1714

我知道某些数字不能完全表示为 float 。 1713.6 的实际浮点表示是 1713.5999755859375(参见 this page)。

但是为什么在这种情况下 HALF_UP 舍入

使用 Java 1.8u25

最佳答案

Java 8 中存在一个关于 NumberFormat 和 RoundingMod HALF_UP 的错误,请参阅 8039915 .这是用 8u40 ( Release Notes ) 修复的。

关于java - 为什么 HALF_UP 有时会四舍五入加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com