如何确定从字符串创建的变体是不是为整数?

Posted

技术标签:

【中文标题】如何确定从字符串创建的变体是不是为整数?【英文标题】:How do I determine if a variant created from a string is a whole number?如何确定从字符串创建的变体是否为整数? 【发布时间】:2009-11-25 08:22:14 【问题描述】:

我希望确定从字符串创建的变体是否为整数。

这是一个测试脚本:

dim v as variant
v = "42"
if v <> round(v) then
    msgBox("<>")
end if

msgBox 弹出,可能是因为变体是从字符串创建的,尽管我本来希望 v 是 = round(v)。

【问题讨论】:

可能值得问问自己是否真的需要处理任何变体和任何整数。一个 1000 位的字符串呢?超出 Long 范围的整数 Doubles 怎么办?如果您准确地指定您需要的内容然后编写代码,将会容易得多。这不是同一个问题,但请参阅 Eric Lippert 在 *** 上对另一个问题的回答:***.com/questions/921180/c-round-up/926806#926806 【参考方案1】:

你应该这样写:

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,即使考虑到您对“类似的东西”的警告。您编码的任何一个答案都有错误。如果您提供代码,它应该是正确的,而不是将查找错误作为练习。 -1 用于防守而不是改进。如果您只使用 Clng 而不是 CInt,则该示例很好 ... 我还应该补充一点,在 *** 上发布答案和 cmets 时,我不会放弃我的任何权利,其中包括捍卫我的立场的权利!对不起,伙计们,但我真的觉得你的“冒犯”立场太过分了。如果你有比我更好的答案或建议,为什么不发布呢? @PhilippeGrondier 在阅读了 cmets 之后,我对人们敢于对您的出色答案投反对票感到失望。您以我需要的精神回答了我的问题,我对此非常满意。【参考方案2】:
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))。

【讨论】:

【参考方案3】:

如何检查地板函数与天花板函数是否匹配?

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

我遇到了类似的问题,这段代码对我有用。

【讨论】:

【参考方案4】:

如果我怀疑数字可能以字符串形式出现,我喜欢使用简单的 +0 技巧。例如对于索引/匹配的东西。像这样:

Dim v As Variant
v = "42"

If IsNumeric(v) Then
    If v + 0 <> Round(v + 0) Then
       MsgBox ("<>")
    End If
End If

这应该适用于日期、文本、数字、数字作为文本。不确定是否或何时中断,应该没问题。

【讨论】:

以上是关于如何确定从字符串创建的变体是不是为整数?的主要内容,如果未能解决你的问题,请参考以下文章

确定字符串是不是是Java中的整数[重复]

具有确定(少量)变体的哈希/摘要

c#中的变体数组

如何在C#中将字符串转换为整数

在编译时从变体中获取类型

java 如何判断字符串是不是可以转换成数字