头一次遇到这么奇怪的事,百思不得其解! Delphi / Windows SDK/APIhttp://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就可以了