IsDouble() in VB6?

3

VB6中是否有IsDouble()函数?如果我没记错的话,VB6中的Double数据类型相当于SQL Server 2000中的float。

5个回答

10

实际上,你最好使用Vartype函数。

Private Function IsDouble(ByVal value As Variant) As Boolean
    IsDouble = (VarType(value) = vbDouble)
End Function

6
Function IsDouble(ByVal varValue As Variant) As Boolean
   Dim dblTest As Double
   On Error Resume Next
   dblTest = CDbl(varValue)
   IsDouble = Err.Number = 0 
End Function

感谢您的代码。 让我揭示一下背景,我需要检查一个来自文本文件的字符串值,以便插入到数据库表(SQL Server 2000)的字段(SQL浮点数据类型)中。 - Thurein
没事,我想到了Val函数。但是如果你有国际用户,你可能也想对此进行测试。我认为CDBl使用区域设置来进行转换。 - Will Rickards
如果你真的想的话,你可以在它周围加上括号或调用CBool函数。但是上面的代码也能正常工作。 - Will Rickards
嗯...我知道我有一些旧代码,我想以那种方式构建一个布尔值,但无法实现。所以我回溯了很久(非常久!)找到了一个例子,结果发现当时我的工作场所有“公司政策”的原因。我想老习惯难改吧。 - Joel Coehoorn
如果“IsDouble”表示“varValue能否表示为double”,那么这将起作用。如果它表示“varValue的类型是否为double”,则不起作用,因为它还将接受整数、长整型、货币和单精度类型并返回true。这表明,应用程序开发中大多数失败都与错误收集要求有关,而不是执行不正确。 - BobRodes
显示剩余2条评论

3

IsNumeric()很好,它只接受适合于Double的值。它具有区域意识,即对于法国区域设置,十进制分隔符是逗号。

我刚在立即窗口中尝试了这个。

Debug.Print IsNumeric("4e308") 
False

VB6 Double在手册中的定义是“VB6 Double变量以IEEE 64位(8字节)浮点数存储,值范围从-1.79769313486232E308到-4.94065645841247E-324为负值,从4.94065645841247E-324到1.79769313486232E308为正值”。
我认为这与SQL Server float相同,根据在线docs。 “浮点精度数字数据具有以下有效值:-1.79E + 308到-2.23E-308,0和2.23E + 308到1.79E + 308”。

1

VB6中没有内置的IsDouble函数,但可以使用内置的IsNumeric函数。否则,您可以使用以下用户定义函数来实现相同的效果:

Function IsDouble(ByVal value As Variant) As Boolean

   Dim convertedValue As Double

On Error Goto EH
   convertedValue = CDbl(value)
   IsDouble = True

Exit Function
   EH:
        IsDouble = False
End Function

0

有一个IsNumeric()函数,应该足够适用。如果这不符合您的需求,您也可以解释一下哪些方面不适用。


让我揭示一下背景,我需要检查从文本文件中获取的字符串值,以便插入到数据库表(SQL Server 2000)的字段(SQL浮点数据类型)中。 - Thurein
好的。IsNumeric的唯一问题是它可能会允许溢出:一个太大而无法适应float类型的数字。 - Joel Coehoorn
这不正确,它只接受符合Double(IEEE标准8字节浮点数)的值。 - MarkJ
MarkJ...你的意思是说,任何满足IsNumeric()条件的值并不总是会溢出SQL 2K浮点数据类型?我的理解正确吗? - Thurein
我认为是这样 - 我对 SQL Server 不是很熟悉。 "VB6 Double 变量存储为 IEEE 64 位(8 字节)浮点数,值的范围从负 1.79769313486232E308 到负 4.94065645841247E-324,正值的范围从 4.94065645841247E-324 到 1.79769313486232E308" - MarkJ
谷歌搜索“t-sql float”会显示其大小,对于那些感兴趣的人来说:
  • 1.79E+308到-2.23E-308,0和2.23E-308到1.79E+308。字节数因科学计数法中指定的精度而异(在t-sql中可以指定):float(24)或更小为4个字节,更大为8个字节。没有指定大小的float默认为float(53),是允许的最大值。
- BobRodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接