在vb.net中,double.Toingle()从double返回错误的值

Via*_*hes 1 vb.net double

这是我的问题:

如果我们有以下价值

0.59144706948010461
Run Code Online (Sandbox Code Playgroud)

我们尝试将其转换为Single我们收到下一个值:

0.591447055
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这不是我们应该得到的.您能解释一下这个价值是如何创造的,我该如何避免这种情况?

谢谢!

Jon*_*eet 6

正如你所看到的,这不是我们应该得到的.

为什么不?我强烈怀疑这是你给出的最接近的Single价值Double.

从文档中Single,修正了拼写错误:

所有浮点数都具有有限的有效位数,这也决定了浮点值接近实数的精确程度.甲Single值具有最多的精度7位十进制数字,尽管最大的9位内部保持.

Double当您被限制在7位有效数字时,您的值是0.5914471 - Single您获得的价值也是如此.您的原始Double值不准确 0.59144706948010461要么...的精确的值DoubleSingle值是:

  • Double:0.5914470694801046146693579430575482547283172607421875
  • Single:0.591447055339813232421875

重要的是你要了解二进制浮点的工作原理 - 请参阅我关于二进制浮点十进制浮点的文章以获得更多背景信息.

  • @Viaches:不,你不能这样做.因为0.591447071根本不能表示为"单一".你要求它预先设定比它更有能力的数字.如果您想了解更多信息,请使用更大的类型. (2认同)