Private Sub Command1_Click()
    Dim mysng As Single
    mysng = 6000 * 6
    MsgBox mysng
    
End Sub
大家来试试这段简单的程序,为什么会有溢出呢?
Private Sub Command1_Click()
    Dim mysng As Single
    mysng = 60000 * 6
    MsgBox mysng
    
End Sub
而这样却不会有溢出.

解决方案 »

  1.   

    Private Sub Command1_Click()
        Dim mysng As Single
        mysng = 6000 * 6.0
        MsgBox mysng
        
    End Sub或者Private Sub Command1_Click()
        Dim mysng As Single
        mysng = 6000.0 * 6
        MsgBox mysng
        
    End Sub这样就不会溢出了,如果两个都是整数他会当整数算的!!
      

  2.   

    6000和6都是落在Integer范围内的。所以被编译器判定为整型,所以计算结果也是整型,而结果36000>32767,超过整型范围,所以在这个结果被隐式转换为Single之前已经溢出。而60000已经不能属于Integer型了,由于后面不带小数点,所以被判断成Long型,而6是Integer型,两者的类型不一样。在作乘法的时候,首先要把Integer的6转换成Long型,然后得出计算结果360000(当然也是long了),而360000<<2147483647,没有溢出。而后Long再被强制转换成Single,没有问题。
      

  3.   

    或者这样:Private Sub Command1_Click()
        Dim mysng As Single
        mysng = 6000! * 6!
        MsgBox mysng
        
    End Sub加上数据类型就可以了!~~~~~