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以前没注意单双精度有这种问题,请问原因及解决方法

解决方案 »

  1.   

    你想结果都是下面那样的?貌似没什么办法,以前遇到过,然后就都将类型改为single了
      

  2.   

    Format函数格式输出,
    或者用
    Decimal 数据类型
    Decimal 变量存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数。这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。
      

  3.   

    楼主和我们开玩笑?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我无法得到楼主的运行结果
      

  4.   

    本帖最后由 bcrun 于 2011-07-15 10:48:53 编辑
      

  5.   

    似乎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
      

  6.   

    单双精度,就是这种情况,楼主可以回头看看关于数据类型部分的说明。
    至于显示格式,可以用FORMAT去规定它按怎样的形式去显示。