头一次遇到这么奇怪的事,百思不得其解!

头一次遇到这么奇怪的事,百思不得其解! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061218134924241.html
用两个变量存double型的值,相乘后的值保留三位小数,问题是:用变量的时候得到的值不能四舍五入,而用数的时候就可以,例子如下,很奇怪,大家可以试一下:  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var   xs,yg,z:double;  
  begin  
            xs:=0.022;  
            yg:=1.25;  
            z:=round(xs*yg*power(10,3))/power(10,3);  
            showmessage(floattostr(z));  
  end;    
   
  这个得到是0.027  
   
  \\\\\\\\\\\\\\\\\\\\\\\\\  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var   z:double;  
  begin  
            z:=round(1.25*0.022*power(10,3))/power(10,3);  
            showmessage(floattostr(z));  
  end;    
   
  这个得到是0.028

哪位老大帮帮我?

这个问题可能是Round浮点数计算精度问题,估计用常数时自动分配的变量精度比double高的缘故。可是搂住使用的变量都是double,为什么要在运算中间作个四舍五入呢,去掉Round,2个运算表达式结果是一样的0.0275

可是我需要保留三位小数呀大侠,咋办?

这个是由于double的精度引起的,改用extended就可以了

posted on 2009-02-19 16:46  delphi2007  阅读(145)  评论(0编辑  收藏  举报