dim d1 as double,dim d2 as double d1=123456.58 d2=123456.6 debug.print d1+d1 '得结果:-200000000040745E-02dim d1 as single,dim d2 as single d1=123456.58 d2=123456.6 debug.print d1+d1 '得结果:-0.0234375以前没注意单双精度有这种问题,请问原因及解决方法
楼主和我们开玩笑?Option ExplicitPrivate Sub Command1_Click() Dim d1 As Double Dim d2 As Double d1 = 123456.58 d2 = 123456.6 Command1.Caption = CStr(d1 + d2) Debug.Print d1 + d2 End SubPrivate Sub Command2_Click() Dim d1 As Single Dim d2 As Single d1 = 123456.58 d2 = 123456.6 Command2.Caption = CStr(d1 + d2) Debug.Print d1 + d2 End Sub我无法得到楼主的运行结果
本帖最后由 bcrun 于 2011-07-15 10:48:53 编辑
似乎LZ是在开玩笑! 得到LZ结果的代码是 Private Sub Command1_Click() Dim d1 As Double Dim d2 As Double d1 = 123456.58 d2 = 123456.6 Debug.Print d1 - d2 '得结果:-200000000040745E-02 End SubPrivate Sub Command2_Click() Dim d1 As Single Dim d2 As Single d1 = 123456.58 d2 = 123456.6 Debug.Print d1 - d2 '得结果:-0.0234375 End Sub
或者用
Decimal 数据类型
Decimal 变量存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数。这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。
Dim d1 As Double
Dim d2 As Double
d1 = 123456.58
d2 = 123456.6
Command1.Caption = CStr(d1 + d2)
Debug.Print d1 + d2
End SubPrivate Sub Command2_Click()
Dim d1 As Single
Dim d2 As Single
d1 = 123456.58
d2 = 123456.6
Command2.Caption = CStr(d1 + d2)
Debug.Print d1 + d2
End Sub我无法得到楼主的运行结果
得到LZ结果的代码是
Private Sub Command1_Click()
Dim d1 As Double
Dim d2 As Double
d1 = 123456.58
d2 = 123456.6
Debug.Print d1 - d2
'得结果:-200000000040745E-02
End SubPrivate Sub Command2_Click()
Dim d1 As Single
Dim d2 As Single
d1 = 123456.58
d2 = 123456.6
Debug.Print d1 - d2
'得结果:-0.0234375
End Sub
至于显示格式,可以用FORMAT去规定它按怎样的形式去显示。