floating-point - 为什么对 double 值的操作不能给出预期的结果?

标签 floating-point double floating-accuracy ieee-754

    System.out.println(2.14656);

2.14656
    System.out.println(2.14656%2);

0.14656000000000002

跆拳道?

最佳答案

确实给出了预期的结果。你的期望是不正确的。

当您键入 double 文字时 2.14656 ,您实际得到的是最接近的 double 值,即:

2.14656000000000002359001882723532617092132568359375
println当它打印出来时碰巧把它舍入(到 17 个有效数字),所以你会看到你期望的好值。

经过模数运算(这是精确的)后,该值为:
0.14656000000000002359001882723532617092132568359375

同样,这在打印时会四舍五入,但因为前导数字少一位,所以圆点向右一位数字,因此您会看到尾随 2 .

关于floating-point - 为什么对 double 值的操作不能给出预期的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892908/

相关文章:

c++ - 由于 float 和 double 的精度有限而导致的错误

C 基础知识 : double variable not equal to double expression?

c++ - 在 C++ 中使用 floor 函数的舍入误差

elasticsearch - 在 Elasticsearch 中使用 scaled_float 可以表示什么范围的数字?

objective-c - 浮点工作正常......大多数时候

c# - 如何在 C# 中处理 NaN 和无穷大值

string - Swift 从字符串中提取 Int、Float 或 Double 值(类型转换)

c - 如果定义 float ,是否需要指定 x.yf?

c++ - 计算机如何将 float 转换为十进制字符串?

mysql浮点存储大小?