我正在寻找一个优雅的解决方案来确定一个变体是否是VBA中的整数。不幸的是,如果变体是从一个字符串创建的,我就卡住了。这里有一个小测试脚本:如何确定变体是否为VBA中的整数?
dim v as variant
v = "42"
if v <> round(v) then
msgBox("<>")
end if
这里,MSGBOX弹出,可能是因为该变种是从一个字符串创建,虽然我本来期望V至是= ROUND(V)。
我正在寻找一个优雅的解决方案来确定一个变体是否是VBA中的整数。不幸的是,如果变体是从一个字符串创建的,我就卡住了。这里有一个小测试脚本:如何确定变体是否为VBA中的整数?
dim v as variant
v = "42"
if v <> round(v) then
msgBox("<>")
end if
这里,MSGBOX弹出,可能是因为该变种是从一个字符串创建,虽然我本来期望V至是= ROUND(V)。
你应该写类似:
if cDbl(v) <> round(cDbl(v)) Then
凡cDbl是一个函数的数据转换为双类型号。在调用cDbl函数之前,您可能不得不使用isNumeric()函数将v转换为数字的情况。你甚至可以使用CInt函数为您比较:
if isnumeric(v) then
if cDbl(v) - cInt(v) <> 0 Then
....
endif
else
debug.print "data cannot be converted to a number"
endif
Sub test()
Dim v As Variant
v = "42"
If Val(v) <> Int(Val(v)) Then
MsgBox ("<>")
End If
End Sub
如果使用瓦尔(),它会尽力转换为数字。如果它不能,那么它将返回零并且Val(v)将总是等于Int(Val(v))。
可能值得问问自己,如果你真的需要处理任何变体和任何整数。 1000字符串怎么样?在长范围之外积分双打怎么样?如果你确切地说明你需要什么,然后编码,那将会容易得多。这不是同一个问题,但看到这个答案由埃里克利珀特在这里的另一个问题在Stackoverflow:http://stackoverflow.com/questions/921180/c-round-up/926806#926806 – jtolle 2009-11-25 18:52:20