使用float和double进行计算,给出不同的结果
这个问题在这里已经有了答案:
由于如何表示浮点数和小数点,演员阵容可能会导致不同的结果。
对于: 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
变量。
上一篇: Using float and double for calculation, giving different results
下一篇: Java Double value = 0.01 changes to 0.009999999999999787