浮点到长转换

时间:2019-04-01 08:50:25

标签: java

我正在尝试将浮点值转换为32位无符号长值,并面临价值损失的问题。 long v = (long) f;

这里f是4294967295((2 ^ 32)-1)。由于将float转换精确到小数点后7位,所以将long转换为4294967296而不是4294967295。我需要精确到9位小数。有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

Java Puzzlers中的语录:陷阱,陷阱和案例案例

  

浮点运算返回最接近其浮点值的浮点值   精确的数学结果。一旦相邻浮点值之间的距离   大于2,将1加到浮点值将无效,   因为不会达到两个值之间的中点。对于浮点类型,   加1无效的最小幅度为2 ^ 25,或者   33,554,432;对于double类型,它是2 ^ 54,或大约1.8×10 ^ 16。

因此,从根本上讲,如果要表示大数,float是个坏主意。高于2 ^ 25时,它至少不能表示所有其他整数。数字越大,情况越糟。

您最好的选择是改用BigDecimal