我知道这似乎是一个非常愚蠢的问题,但我不明白为什么这不起作用.这个:
System.out.println(5 % .10);
Run Code Online (Sandbox Code Playgroud)
它正在回归:
0.09999999999999973
Run Code Online (Sandbox Code Playgroud)
我真的不知道.我只是在学习Java,而且我对C#非常好,所以我尝试用C#来.C#似乎也回归了同样的事情.
这是由于浮点精度.0.10无法用二进制表示.因此,结果并不完全0.10,因此不会被修改为0.
这将起作用0.25因为0.25 可以用二进制表示.
编辑:
通常,任何可以表示为分母中具有2次幂的分数的数字都可以精确地表示在IEEE浮点中.(假设它没有上溢/下溢)
正如其他人所解释的那样,这是由于浮点精度造成的不准确.
你应该使用BigDecimal,在这种情况下是包含小数的精确算术的余数方法.
BigDecimal number = new BigDecimal(5);
BigDecimal divisor = new BigDecimal("0.1");
BigDecimal result = number.remainder(divisor);
System.out.println(result); // 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4588 次 |
| 最近记录: |