Foxtable(狐表)用户栏目专家坐堂 → Val转换报错


  共有1984人关注过本帖树形打印复制链接

主题:Val转换报错

帅哥哟,离线,有人找我吗?
z769036165
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:758 积分:5408 威望:0 精华:0 注册:2012/10/5 21:53:00
Val转换报错  发帖心情 Post By:2020/12/26 15:18:00 [只看该作者]

最直接的判断和转换

前面已经讲到,使用转换函数转换数据类型,在转换失败的情况下,会出现错误提示。
使用TryParse方法,可以避免错误提示,但是代码略显繁琐。

最常见的转换应该是将字符转换为数字,对于这种转换,有更直接的方法。
Visual Basic提供了一个Val函数,用于将字符转换为数值,即使转换失败,也不会报错,而是返回0。


例如:

Dim s1 As String = "abc"
Dim
s2 As String = "123.12"
Output.Show(Val(s1) +
100) '等于100
Output.Show(Val(s2) +
100)
'等于223.12

虽然变量s1是无法转换为数值的,但是在命令窗口执行上面的代码,却不会有任何错误提示,因为Val函数将s1被转换为0了。


发现如果Dim s2 As String = "123.12%" 改成这样,这个就报错了!


 回到顶部
帅哥哟,离线,有人找我吗?
YDS
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:606 积分:3415 威望:0 精华:0 注册:2011/5/21 18:05:00
  发帖心情 Post By:2020/12/26 15:26:00 [只看该作者]

Dim s2 As String = "123.12{%}"

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107846 积分:548581 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/26 16:12:00 [只看该作者]

val转换里%是一个特殊用法,如果%之后没有其它字符,则表示前面的数值按照short整数类型(http://www.foxtable.com/webhelp/topics/0208.htm)进行转换。123.12是小数,val里是使用CShort强制转换,自然就出错了。

下面是val函数源码的一部分,可以看到,如果要转换的字符串最后是&表示转换为int整数,如果是@表示转换为双精度,!表示转换为单精度
    Select Case ch
        Case "&"c
            If (num5 > 0) Then
                Throw ExceptionUtils.VbMakeException(13)
            End If
            Return CInt(Math.Round(num7))
        Case "@"c
            Return Convert.ToDouble(New Decimal(num7))
        Case "!"c
            Return CSng(num7)
        Case "%"c
            If (num5 > 0) Then
                Throw ExceptionUtils.VbMakeException(13)
            End If
            Return CShort(Math.Round(num7))
    End Select

 回到顶部