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

Ada*_*dam 6 .net vb.net floating-point

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

Dim mysingle As Single = 456.11
Dim mybool As Boolean = mysingle = 456.11
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ahm*_*eed 10

在第二个语句中比较的值不被视为a Single,而是被视为a Double.既然你正在使用VB.NET,你可以用a后缀!来强制它到a Single,这将返回True:

Dim mysingle As Single = 456.11
Dim mybool As Boolean = mysingle = 456.11!
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 9

我建议阅读: 每个计算机科学家应该知道的关于浮点运算的内容.

它详细解释了浮点数学的精度问题.有关上述内容的更简单说明,请参阅"浮点指南".