使用float和double进行计算,给出不同的结果

这个问题在这里已经有了答案:

  • 为什么不使用Double或Float来表示货币? 14个答案
  • 浮点数学是否被破坏? 23个答案

  • 由于如何表示浮点数和小数点,演员阵容可能会导致不同的结果。

    对于: double value1 = 0.999939f * 0.987792f您将两个浮点数相乘,然后将其转换为double。 由此产生的浮点表示是被转换为double的浮点表示。

    对于: double value2 = 0.999939 * 0.987792; 你会增加两个双打,并将它保存在一个双打中。 这是没有铸造的时候,因此表示从不改变(即不会因数据表示的变化而导致潜在的数据丢失)。

    对于: double value3 = (double)0.999939f * 0.987792f; 你正在乘以一个浮点数的double,乘以一个浮点数。 由于Java数学运作的原因,第二个浮点数可能也会被转换为双精度浮点数,所以现在您将乘以两个浮点数的双精度浮点数,从而产生第三个浮点数。

    因为float和double有不同的精度,每个精度都会得到不同的结果。 有关浮点运算的更多信息,请参见此处。


    当你用“f”字符编写一个数字时,它被认为是float ,这意味着它用32位编码,而没有它,它是一个double float ,用64位编码。

    位数越多,您就越准确地表示十进制数字。 这对于小数点后的数字没有什么不同,但在你的情况下它是重要的。

    总之,在代码中只使用double变量。

    链接地址: http://www.djcxy.com/p/85803.html

    上一篇: Using float and double for calculation, giving different results

    下一篇: Java Double value = 0.01 changes to 0.009999999999999787