在 VBA 中将 2 个单精度数字彼此分开时出现奇怪的结果

Strange result when taking 2 single-precision figures away from each other in VBA

谁能解释一下为什么下面的结果不等于零?

? CSng("0.199881939681229")
? CSng(0.1998819)
? CSng(CSng(0.199881939681229) - CSng(0.1998819))

第一行returns0.1998819 第二行 returns 0.1998819 也是 但是第三个 returns 4.470348E-08

如果两个数字在单精度数据类型中完全由相同的值表示,那么这个数字来自哪里。

好像这个问题的另一个答案被删除了,所以我会自己回复。

VBA 返回 0.1998819 但它实际上并未将两个数字存储为相同的二进制文件。

http://www.binaryconvert.com/result_float.html?decimal=048046049057057056056049057051057054056049050050057http://www.binaryconvert.com/result_float.html?decimal=048046049057057056056049057

几乎相同但又不同。

谜团解开了,VBA 浮点数立即表示 window 是问题所在。