当我将2.3211232f作为值分配给Java中的float变量时,它被分配为2.3211231那个变量。 为什么会发生这种情况?
最佳答案
在 Java 中,浮点值以 2 的幂为单位。对于 2 到 4 之间的数字,float
使用的单位是 2−22。这是因为 float
具有 24 位有效数,因此,当高位表示 21 时(对于 2 到 4 之间的数字来说必须如此),低位表示 2< super>1−23 = 2−22。
2−22 是 0.0000002384185791015625,因此 2 到 4 之间的可表示数字以该大小的步长间隔。 2.3211232 附近可表示的数字是:
- 2.3211228847503662109375
- 2.3211231231689453125000
- 2.3211233615875244140625
其中,2.3211231231689453125000 最接近 2.3211232,因此,当源文本 2.3211232f
转换为 float
时,结果为 2.3211231231689453125000。
Java 的默认格式将其显示为“2.3211231”,因为它使用足够的十进制数字来唯一标识该值。它没有显示精确值的所有数字,因此它歪曲了该值。切勿将默认格式的结果作为实际值。
关于java - Java 中 float 的值在赋值时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672760/