我能够重现您遇到的问题(VBA),并且它似乎确实是(特别是) VB IDEs处理类型的错误Single
。即,VB IDE 将不正确地将Single
默认值转换为,int
然后再将其打印出来(作为方法签名的一部分)作为(截断的)单精度浮点值。
这个问题在Microsoft Script EditorOleView.exe
中不存在,在etc中也不存在。
要进行测试,请尝试以下Single
默认值:18446744073709551615.0
. 就我而言,此值在 TLB 中正确编码,OleView.exe
并由Microsoft 脚本编辑器正确显示为1.844674E+19
. 但是,它会像-2.147484E+09
在 VB IDE 中一样显示。实际上,转换(float)18446744073709551615.0
为int
产生-2147483648
的结果显示为float
,产生观察到的(不正确的)VB IDE 输出-2.147484E+09
。
类似地,50.6
被强制转换int
为生产51
,然后打印为51
。
要解决此问题,请使用Double
Single
我能够测试的所有 IDE正确Double
转换和显示的,而不是,。
在切线上,您可能已经意识到某些浮点值(例如0.1
)没有相应的精确IEEE 754 表示,并且无法与其他值(例如0.1000000015
)区分开来。因此,指定默认的双精度值of0.1
将在大多数 IDE 中显示为0.100000001490116
. 缓解此精度问题的一种方法是为您的参数选择不同的比例(例如,从秒切换到毫秒,因此0.1
秒将变为100
毫秒,可以明确表示为单精度和双精度浮点以及整数值/参数。 )