定义了三个双精度的变量 a,b,c  a=2524.6 b=4.6 c=11613.16
    语句if a*b<>c  为真?
    应该是相等的啊,是不是double类型数据存在精度上的丢失?

解决方案 »

  1.   

    之所以叫浮点数,主要是因为它存储数字的方式类似于科学计数法。当用科学计数法表示某个数时,可以表示为 1-10 之间的某个数乘以 10 的幂次方。
    例如,10001 被表示为 1.0001 * 10^4,0.0010001 被表示为 1.001*10^-3 。可以看出,小数点”浮动“到第一个数字后面。
    看到上面的内容:
    于是就有了以下猜测:a=2524.6 
    2.5246*10^3
    b=4.6 
    4.6*10^0
    c=11613.16 
    1.161316*10^4a*b之后的值为 .(2.5246*4.6)10^3+0 =11.61316*10^3 
    C =1.161316*10^4所以不相等.为了证明:示例1
    Private Sub Command1_Click()
     Dim A As Double
     Dim b As Double
     Dim c As Double
     
     A = 2.1
     b = 4
     c = 8.4
     
     If A * b = c Then  'OK.表示相等
       MsgBox ""   
     End If
     
    End Sub示例2
    Private Sub Command1_Click()
     Dim A As Double
     Dim b As Double
     Dim c As Double
     
     A = 2.1
     b = 5
     c = 10.4
     
     If A * b = c Then  'NO.表示不相等
       MsgBox ""   
     End If
     
    End Sub
    '以上只是猜测,望高手指正
      

  2.   

    精度问题
    通常你这种要精确比较的情况,应该用currency类型
      

  3.   

    可以这样试试:
    if abs(a*b-c)>0.00000001 then
        '不相等的处理
    end if
      

  4.   

    要想判断是否相等:
    这样就行了,
    我也想知道为什么出现这种情况,希望楼下能给出一些猜想:if cstr(a*b) <>cstr(c) then
       '一定OK.我试过.
    end if
      

  5.   

    a=2686.8 b=2.3  c=6179.64  
    语句if a*b <>c  为假  ?这组数据就好象是假 ??