为什么在vb.net中如果我为一个变量分配一个数字,它不等于相同的值

时间:2010-11-02 16:51:17

标签: .net vb.net floating-point

我一直在网上搜索,试图以简单的形式理解为什么会出现这种情况。

Dim mysingle As Single = 456.11
Dim mybool As Boolean = mysingle = 456.11

在上面的行中,mybool变得虚假。当我将单个放入双重时,我发现了这种行为,我发现了额外的数字。 .net文档声明单个是一个近似值:S

我是一个单位是32位浮点数吗?但是,当我明确说出这个数字是什么时,为什么会出现额外的数字..当然,内存应该存储我的数字的任何一边的数字是0以填满内存位置?!

我的大脑在这一个上炸了:(

3 个答案:

答案 0 :(得分:10)

第二个语句中比较的值不被视为Single,而是被视为Double。由于您使用的是VB.NET,因此可以使用!将其后缀为Single,这将返回True

Dim mysingle As Single = 456.11
Dim mybool As Boolean = mysingle = 456.11!

答案 1 :(得分:9)

我建议阅读:What Every Computer Scientist Should Know About Floating-Point Arithmetic

详细解释了浮点数学的精度问题。有关上述内容的更简单说明,请参阅The Floating Point Guide

答案 2 :(得分:1)

理解.NET中浮点的另一个很好的参考:http://www.yoda.arachsys.com/csharp/floatingpoint.html

让我强调他对比较的观点:

  

所有这一切的一个后果就是   你应该非常非常少   比较二进制浮点数   直接相等的数字。 [...]   这样做的一个简单方法是   从另一个中减去一个,使用   Math.Abs​​找到绝对值   区别,然后检查是否   这低于一定的容差   水平。