我正在确定从字符串创建的变体是否是整数。
这里是一个测试脚本:
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(),它将尽最大努力将其转换为数字。如果不能,它将返回零,在这种情况下,Val(v)将始终等于Int(Val(v))。
如何检查地板功能是否与天花板功能匹配?
Private Function isWhole(value As Variant) As Boolean
If WorksheetFunction.Ceiling_Math(value) = WorksheetFunction.Floor_Math(value) Then
isWhole = True
Else: isWhole = False
End If
End Function
我有一个类似的问题,此代码对我有用。
如果我怀疑数字可能以字符串形式出现,我喜欢使用简单的+0技巧。例如索引/匹配的东西。像这样:
Dim v As Variant
v = "42"
If IsNumeric(v) Then
If v + 0 <> Round(v + 0) Then
MsgBox ("<>")
End If
End If
这应该适用于日期,文本,数字,数字作为文本。不知道是否或何时打破,应该没问题。