我正在尋找一個優雅的解決方案來確定一個變體是否是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