用两个变量存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就可以了
--------------------------
新闻:
专注、极致、快、口碑 互联网创业的葵花宝典导航:
博客园首页 知识库 新闻 招聘 社区 小组 博问 网摘 找找看
阅读(732) | 评论(0) | 转发(0) |