首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB类型转换,该如何处理

2012-12-16 
VB类型转换 1dim I as integer dim J as integerI3J8print.debug I + Jprint.debug I & J2dim rst as ne

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编程 里也没有解释。

热点排行