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

时间:2013-11-14 15:08:24

标签: vb.net double

这是我的问题:

如果我们有以下值

0.59144706948010461

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

0.591447055

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

谢谢!

2 个答案:

答案 0 :(得分:6)

  

正如你所看到的,这不是我们应该接受的。

为什么不呢?我强烈怀疑这是你给Single的最近Double值。

Single的文档中修正了错字:

  

所有浮点数的有效位数都有限,这也决定了浮点值接近实数的准确程度。 Single值的精度最多为7位小数,但内部最多保留9位数。

限制为7位有效数字时,Double的值为0.5914471 - 您获得的Single值也是如此。您原来的Double 0.59144706948010461 ... DoubleSingle值的完全值为:

  • Double:0.5914470694801046146693579430575482547283172607421875
  • Single:0.591447055339813232421875

了解二进制浮点的工作原理非常重要 - 请参阅binary floating点上的文章和decimal floating点以获取更多背景信息。

答案 1 :(得分:0)

从double转换为float时,你也会四舍五入。结果应该是最接近您要舍入的数字的单精度数。

这正是你在这里得到的。

0.5到1之间的浮点数的格式为n / 2^24n位于2^232^24之间。

0.59144706948010461... = 9922835.23723472274456576... / 2^24

所以最接近的单精度浮点数是

9922835 / 2^24 = 0.5914470553...