这是我的问题:
如果我们有以下值
0.59144706948010461
我们尝试将其转换为 Single 我们收到下一个值:
0.591447055
正如你所看到的,这不是我们应该收到的。您能否解释一下这个价值是如何产生的,我该如何避免这种情况?
谢谢!
正如你所看到的,这不是我们应该收到的。
为什么不?我强烈怀疑这是与您给出的最接近的Single
值。Double
从 的文档中Single
,修复了错字:
所有浮点数都有有限数量的有效数字,这也决定了浮点值与实数近似的准确程度。一个
Single
值最多具有 7 位十进制数字的精度,但内部最多保留 9 位数字。
当限制为 7 位有效数字时,您的Double
值为 0.5914471 -Single
您获得的值也是如此。您的原始Double
值也不完全是0.59144706948010461 ...和值的确切值是:Double
Single
Double
: 0.5914470694801046146693579430575482547283172607421875Single
: 0.591447055339813232421875从 double 转换为 float 时,您也在四舍五入。结果应该是最接近四舍五入数字的单精度数字。
这正是你在这里得到的。
介于 0.5 和 1 之间的浮点数具有介于 和之间的n / 2^24
形式。n
2^23
2^24
0.59144706948010461... = 9922835.23723472274456576... / 2^24
所以最接近的单精度浮点数是
9922835 / 2^24 = 0.5914470553...