当前位置:编程学习 > VB >>

关于ISNUMERIC的问题

我用ISNUMERIC这个函数判断1,0000000000这个字符串他为什么返回true啊
怎样才能实现判断一串字符全部为数字啊 --------------------编程问答-------------------- "1,0000000000"VB转化为数字时为1,可试一下,MsgBox Val("1,0000000000")为证,当然ISNUMERIC("1,0000000000")=True了. --------------------编程问答-------------------- 我觉得老张你这样用Val来打比方解释可能不对,那还有这个呢

?val("2 3dsf")
 23 

那个,好像是被当作分节号处理了,你看
?CInt("1,33")
 133  --------------------编程问答-------------------- 格式化了的数据 --------------------编程问答--------------------
引用 2 楼 bcrun 的回复:
我觉得老张你这样用Val来打比方解释可能不对,那还有这个呢

?val("2 3dsf")
 23 

那个,好像是被当作分节号处理了,你看
?CInt("1,33")
 133

NND 我一直以为 val(字符串)一定=0呢
长知识了 --------------------编程问答--------------------
引用楼主 czzhangzhen 的回复:
我用ISNUMERIC这个函数判断1,0000000000这个字符串他为什么返回true啊
怎样才能实现判断一串字符全部为数字啊

lz不妨试一下
const s="1,0000000"
if s=val(s) then msgbox "ok"
   --------------------编程问答-------------------- 使用正则来判断精确的格式


添加引用:
Microsoft VBScript Regular Expressions 5.5
然后用如下代码


Public Function IsMatch(ByVal pattern As String, ByVal test As String) As Boolean
    '定义正则
    Dim myRegExp As RegExp
    Dim myMatches As MatchCollection
    Set myRegExp = New RegExp
    myRegExp.IgnoreCase = True
    myRegExp.Global = True
    '正则表达式
    myRegExp.pattern = pattern
    '匹配
    IsMatch = myRegExp.test(test)
End Function

Private Sub Command3_Click()
    MsgBox IsMatch("^\d+(\.\d+)?$", "1,0000000000")
End Sub
--------------------编程问答--------------------
引用 4 楼 fzx4936 的回复:
NND 我一直以为 val(字符串)一定=0呢


关于这点,MSDN Library上还是有明确的说明的(请注意关于逗号处理的红色部分):
Val 函数,在它不能识别为数字的第一个字符上,停止读入字符串。那些被认为是数值的一部分的符号和字符,例如美圆号与逗号,都不能被识别。但是函数可以识别进位制符号 &O(八进制)和 &H(十六进制)。空白、制表符和换行符都从参数中被去掉。

MSDN 中关于"IsNumeric 函数"的说明是很简略的,不过还好,刚才我在"高级变量主题"这里找到了相应的明确说明,估计可以深合楼主之意:
当 Visual Basic 将一个非数值的表示(如包含一个数的字符串)转换成数值时,它会使用地区设置(在 Windows 的“控制面板”中规定)来解释千位分隔符、小数点符号和货币符号。

于是,如果 Windows 的“控制面板”中的国家/地区设置值被设置成美国、加拿大或澳大利亚,则这两个语句将返回 True:

IsNumeric ("$100")
IsNumeric ("1,560.50")

而下面两个语句则返回 false:

IsNumeric ("DM100")
IsNumeric ("1.560,50")

但是,如果在 Windows 的“控制面板”中的国家/地区设置值被设置成德国,则情况正好相反:前两个语句返回 false,而后两个语句返回 true。

附注:在意大利,逗号和小数点的含义是相反的,见在"用 Visual Basic编写国际化代码"一节里的:

数值和分隔符
在美国,句号 (.) 被作为小数点。但在一些欧洲国家/地区,小数点是逗号 (,)。类似地,美国把逗号作为分隔小数点左边每三位的千分位符,而一些欧洲国家/地区使用空格实现此功能。下表列出了不同数字格式的一些例子。

国家/地区 数字格式 
美国 1,234,567.89
1,234.56
.123 
法国 1 234 567,89
1 234,56
0,123 
意大利 1.234.567,89
1.234,56
0,123 


注意 在Visual Basic 中函数 Str 和 Val 总是把句号当成小数点。但这在大多数区域中是不适用的。因此应该使用 CStr, CDbl, CSng, CInt 和 CLng 函数把其它数据类型转换为需要的数据类型。这些函数通过系统区域来决定小数点。

详细信息 关于 Print 和 Format 函数的详细信息请参阅本章后面的“区域识别函数”。关于函数“CStr 函数”,“CDbl 函数”,“CSng 函数”,“CInt 函数”,“CLng 函数”,“CDate 函数”和“CCur 函数”,请参阅《语言参考》。也可参阅“变量、常数和数据类型”。
--------------------编程问答--------------------
引用 5 楼 fzx4936 的回复:
lz不妨试一下
const s="1,0000000"
if s=val(s) then msgbox "ok"

这个不能解决小数点的问题,你可以试一下s="1000.9"
--------------------编程问答--------------------
引用楼主 czzhangzhen 的回复:
我用ISNUMERIC这个函数判断1,0000000000这个字符串他为什么返回true啊
怎样才能实现判断一串字符全部为数字啊


Private Sub Check1_Click(Index As Integer)
  Dim n As String
  n = "1000000000.0"
  If IsNumeric(n) And InStr(n, ",") = 0 And InStr(n, ".") = 0 Then
     MsgBox n & "纯数字字符中"
  Else
     MsgBox n & "含有非数字字符"
  End If
End Sub

--------------------编程问答-------------------- IsNumeric函数判断含有分组符(逗号,)和小数点(句号.)的数字串均返回true
--------------------编程问答-------------------- 数字中间允许逗号","分隔符,属于数字格式化问题;如果不允许使用逗号格式化的数字,可以这样写If     If IsNumeric("1,0000000000") And InStr("1,0000000000", ",") = 0 Then
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,