单数据类型未按预期添加。有人可以向我解释为什么这样做吗?
问题如下所示:
Dim h As Single
h += CSng(703.35) 'result: h = 703.35
h += CSng(703.35) 'result: h = 1406.7
h += CSng(703.35) 'result: h = 2110.0498 WTF
答案 0 :(得分:2)
单指IEEE754。 IEEE754无法表达每一个值。您很可能拥有IEEE754中不存在的值,并且您得到的结果是最接近的近似值。
如果你需要的价值观符合我们肉食人类倾向于同意的价值,那就是"确切的"近似(注意矛盾),你应该使用小数,而不是单个。
要明确:十进制和单一都被强制近似 - 只有这么多你可以做的是将这样一系列可能的值拟合成有限字节。但他们的近似方式是不同的。十进制适用于金钱等离散测量; double适用于连续测量