如果你在这里尝试代码:
public class AddDecimalsMain {
public static strictfp void main(String[] args) {
System.out.print("Default: ");
System.out.println(0.1 + 0.2);
System.out.print("Float: ");
System.out.println(0.1F + 0.2F);
System.out.print("Double: ");
System.out.println(0.1D + 0.2D);
}
}
你会得到
Default: 0.30000000000000004
Float: 0.3
Double: 0.30000000000000004
请不要给我解决方案,我已经知道解决方案是使用float,这给了我正确的补充,或者更好的BigDecimal,我只想了解为什么 java的浮点运算在这种非常特殊的情况下,它比默认或双算术更“准确”。
此外,如果我将0.2更改为0.1,甚至0.3,我似乎在所有情况下都得到了正确答案。
所以如果我加0.1 + 0.1,我会在所有情况下都正确地得到0.2,我注意到这个奇怪的事情发生在我添加0.1 + 0.2
我甚至在方法中尝试了strictfp,认为这可能会让事情变得准确,但事实并非如此,我再次试图了解这里发生的事情,而不是如何解决它。
我和男生一样困惑。