这样几行代码
Dim a As Single
Dim b As Single
a = 2600
b = 2601.1
Debug.Print b - a为什么结果是 1.100098 
用double  会有更长的尾巴,但不一样.
可以自己试一下.应该是 1.100000 才对呀.
有没有高手讲一下,散分!!!
谢过!!!

解决方案 »

  1.   

    Single和double为浮点数据类型,在计算机中存储为近似值,
    你精度要求高可以用currency类型,你试试
    Private Sub Form_Load()
        Dim a As Currency
        Dim b As Currency
        
        a = 2600
        b = 2601.1
        Debug.Print b - a
    End Sub
      

  2.   

    精度要求高用currency?
    Private Sub Command1_Click()
        Dim a As Currency
        Dim b As Currency
        
        a = 2600
        b = 2601.00001
        Debug.Print b - a
    End Sub
    结果是1
      

  3.   

    可以用double类型,然后用int或者round保留到你要求的小数位数就行了。
      

  4.   

    精度=小数位数?Currency 数据类型
     Currency 变量存储为 64 位(8 个字节)整型的数值形式,然后除以 10,000 给出一个定点数,其小数点左边有 15 位数字,右边有 4 位数字。这种表示法的范围可以从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。Currency 的类型声明字符为at号 (@)。Currency 数据类型在货币计算与定点计算中很有用,在这种场合精度特别重要。
      

  5.   

    我是这么做的
    debug.print Format((b - a), "#0.###")
    也没有问题
      

  6.   

    其它编程工具也有同样的问题,这是因为double 类型数据的存储方式引起的.
    一般解决方法就是用round()函数来指定小数点后的位数.
      

  7.   

    round 
    format
    喜欢哪个用哪个
      

  8.   

    round 
    format
    喜欢哪个用哪个
      

  9.   

    大家说的都不错,round 和format俺当然早就用了,
    只是原来不太清楚他就怎么会变了,经过大家指点
    俺又了解多了一些.
    感谢大家捧场.