这是我的问题:
如果我们有以下价值
0.59144706948010461
Run Code Online (Sandbox Code Playgroud)
我们尝试将其转换为Single我们收到下一个值:
0.591447055
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这不是我们应该得到的.您能解释一下这个价值是如何创造的,我该如何避免这种情况?
谢谢!
正如你所看到的,这不是我们应该得到的.
为什么不?我强烈怀疑这是你给出的最接近的Single
价值Double
.
从文档中Single
,修正了拼写错误:
所有浮点数都具有有限的有效位数,这也决定了浮点值接近实数的精确程度.甲
Single
值具有最多的精度7位十进制数字,尽管最大的9位内部保持.
Double
当您被限制在7位有效数字时,您的值是0.5914471 - Single
您获得的价值也是如此.您的原始Double
值不准确 0.59144706948010461要么...的精确的值Double
和Single
值是:
Double
:0.5914470694801046146693579430575482547283172607421875Single
:0.591447055339813232421875重要的是你要了解二进制浮点的工作原理 - 请参阅我关于二进制浮点和十进制浮点的文章以获得更多背景信息.