我正在寻找一个优雅的解决方案来确定变量是否是VBA中的整数。不幸的是,如果变体是从字符串创建的,我就被卡住了。这是一个小测试脚本:
dim v as variant
v = "42"
if v <> round(v) then
msgBox("<>")
end if
这里,msgBox会弹出,可能是因为变量是从字符串创建的,尽管我希望v是= round(v)。
答案 0 :(得分:9)
你应该写一些类似的东西:
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
答案 1 :(得分:3)
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))。
答案 2 :(得分:0)
如何检查地板功能是否与天花板功能匹配?
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
我遇到了类似的问题,此代码对我有用。
答案 3 :(得分:0)
如果我怀疑数字可能以字符串形式出现,我喜欢使用简单的+0技巧。例如索引/匹配的东西。像这样:
Model: "model_1"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_3 (InputLayer) [(None, 3)] 0
__________________________________________________________________________________________________
dense_1 (Dense) (None, 100) 400 input_3[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 100) 10100 dense_1[0][0]
__________________________________________________________________________________________________
input_4 (InputLayer) [(None, 4)] 0
==================================================================================================
Total params: 10,500
Trainable params: 10,500
Non-trainable params: 0
__________________________________________________________________________________________________
这应该适用于日期,文本,数字,数字作为文本。不确定是否或何时中断,应该没问题。