【发布时间】:2016-09-12 19:09:25
【问题描述】:
根据MSDN,对于 Variant 数据类型:
“数值数据可以是任何整数或实数值,负值从 -1.797693134862315E308 到 -4.94066E-324,正值从 4.94066E-324 到 1.797693134862315E308。”
但是,即使计算后的所有最终值都在可接受的范围内,以下代码也会出错:
Sub Test()
Dim v1, v2, v3, v4
v1 = 569847501 + 54678 ' OKAY
v2 = 7784687414# + 98565821345# ' OKAY
v3 = 7784687414# + 1132747441 ' OKAY
v4 = 1132747441 + 1788441323 ' FAILS
End Sub
MSDN 也指出:
” 但是,如果对包含 Byte、Integer、Long 或 Single 的 Variant 执行算术运算,结果超出原始数据类型的正常范围,则结果在 Variant 内提升为下一个更大的数据类型。 Byte 提升为 Integer,Integer 提升为 Long,Long 和 Single 提升为 Double。”
文档指出,当算术运算超出原始数据类型的正常范围时,应提升该类型。为什么v4 不升级为Double?
【问题讨论】:
-
请注意,这根本不是
Variant独有的。Dim d As Double : d = 1132747441 + 1788441323做同样的事情。
标签: vba