读书人

VB类型转换,该如何处理

发布时间: 2012-12-16 12:02:32 作者: rapoo

VB类型转换
1
dim I as integer
dim J as integer
I=3
J=8

print.debug I + J
print.debug I & J

2
dim rst as new recordset
set rst=……

print.debug rst.Fields("--")
print.debug rst.Fields("--").value

能详细的讲解一下 VB类型转换 这个问题。
[解决办法]

引用:
1
dim I as integer
dim J as integer
I=3
J=8

print.debug I + J
print.debug I & J

2
dim rst as new recordset
set rst=……

print.debug rst.Fields("--")
print.debug rst.Fields("--").v……

1.如果用+,这个适用于+号两边都是数值。而你的代码两端正都是数值,那么vb就认为用户是要做数字运算,这样就得出了11,你测试下 "3" + 8,结果也是11。但是如果是 "3" + "8"得出的就是38了。
如果用&,那么表示两端应该是字符串。vb就自动转换为字符串连接了。
总结:编译器优先使用标准规则,如果不行则退而求其次,尽量满足用户的要求,“智能化”自动处理。

2.rst.Fields("--")只知道是返回某条记录的某个字段对应的值。下面的.value没用过。
[解决办法]
我觉得吧,
print.debug 其实打印的应该是字符串
这里也是隐式的类型转换

我就想知道,VB的类型转换是怎么实现的。这些东西在c++里讲的很清楚,换到VB就不是很清楚了~~
[解决办法]
引用:
我觉得吧,
print.debug 其实打印的应该是字符串
这里也是隐式的类型转换

我就想知道,VB的类型转换是怎么实现的。这些东西在c++里讲的很清楚,换到VB就不是很清楚了~~
是的,如果vb严格要求起来那么当你输出时都必须加个cstr或者str函数转换下,否则就报错类型不匹配或者内存不能read xx的,你觉得方便么?
[解决办法]
1、自动类型转换是有编译器决定,所以只要记住几个规则就行了
a)始终用 & 操作符进行拼接字符串,坚决不用 + 操作符。
b)参与运算前就明确类型,即用数值类型进行计算、用字符串进行拼接。

2、这里的比较与类型转换无关。
print.debug rst.Fields("--")
print.debug rst.Fields("--").value

前一个语句 Field 对象是不能直接变成文本的,但是作为 COM 对象,如果它的某个成员标记为默认属性,就会取该成员(Value 属性),所以两个语句是等价的。
[解决办法]
不要用隐式类型转换
直接用显式类型转换
函数 返回类型 expression 参数范围
CBool Boolean 任何有效的字符串或数值表达式。
CByte Byte 0 至 255。
CCur Currency -922,337,203,685,477.5808 至922,337,203,685,477.5807。
CDate Date 任何有效的日期表达式。
CDbl Double 负数从 -1.79769313486232E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。
CDec Decimal 零变比数值,即无小数位数值,为
+/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为
+/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。
CInt Integer -32,768 至 32,767,小数部分四舍五入。
CLng Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
CStr String 依据 expression 参数返回 Cstr。
CVar Variant 若为数值,则范围与 Double 相同;若不为数值,则范围与 String 相同。


[解决办法]

Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
i = 3
j = 8
Debug.Print i + j '+对数值类型做加法,对字符串做连接符


Debug.Print i & j '&只对字符串做连接符

End Sub

Private Sub Command2_Click()
Dim i As String
Dim j As String
i = 3
j = 8
Debug.Print i + j '+对数值类型做加法,对字符串做连接符
Debug.Print i & j '&只对字符串做连接符
End Sub




print.debug rst.Fields("--")
print.debug rst.Fields("--").value
'由于值是字段对象的默认属性,所以此处实际关键字value的使用是可选的。

MSDNValue 属性范例中有说明。

[解决办法]

Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
i = 3
j = 8
Debug.Print i + j '+对数值类型做加法,对字符串做连接符
Debug.Print i & j '&只对字符串做连接符,会自动转换数值到字符串

End Sub

Private Sub Command2_Click()
Dim i As String
Dim j As String
i = 3
j = 8
Debug.Print i + j '+对数值类型做加法,对字符串做连接符
Debug.Print i & j '&只对字符串做连接符,会自动转换数值到字符串
End Sub



print.debug rst.Fields("--")
print.debug rst.Fields("--").value
'由于值是字段对象的默认属性,所以此处实际关键字value的使用是可选的。

MSDN Value 属性范例中有说明。


[解决办法]
建议楼主少用隐性转换,比如:i & j 可以改写为: cstr(i) & cstr(j)
[解决办法]
要字符串就用 &
要数值就用 +

纯吹是没事找事,你说对吧,楼猪大人。
[解决办法]
引用:
要字符串就用 &
要数值就用 +

纯吹是没事找事,你说对吧,楼猪大人。

有个人也说来类似的话,我前天把他开了。
现在的人真是浮躁!

msvbvm60.dll 里怎样进行的隐式转换这一问题呀,我到MS网站上找了好久也没有找到。高级VB编程 里也没有解释。

读书人网 >VB

热点推荐