以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- Val转换报错 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159434) |
-- 作者:z769036165 -- 发布时间:2020/12/26 15:18:00 -- Val转换报错 最直接的判断和转换 前面已经讲到,使用转换函数转换数据类型,在转换失败的情况下,会出现错误提示。 最常见的转换应该是将字符转换为数字,对于这种转换,有更直接的方法。 例如: Dim s1 As String = "abc"
虽然变量s1是无法转换为数值的,但是在命令窗口执行上面的代码,却不会有任何错误提示,因为Val函数将s1被转换为0了。 发现如果Dim s2 As String = "123.12%" 改成这样,这个就报错了! |
-- 作者:YDS -- 发布时间:2020/12/26 15:26:00 -- Dim s2 As String = "123.12{%}" |
-- 作者:有点蓝 -- 发布时间: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 |