Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1222567
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-02-19 17:03:24



用两个变量存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就可以了



--------------------------
新闻:专注、极致、快、口碑 互联网创业的葵花宝典
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(698) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~