捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:将数字四舍五入保留两位小数
gz818 21140 2006/1/20 17:43:52
delphi7 下如何四舍六入五单双?
tinysoft 12854 2005/2/25 21:09:13
看了大家的方法,我还是喜欢用Format函数!
web700 11867 2005/1/18 11:39:36
function intdata(d:double):double;
begin
  result:=int((d+0.5)*100/100);
end;
qian8233 7911 2004/8/19 18:34:15
由于对系统函数的了解太少,出现这种情况是可以理解的;
对于delphi7中的roundto函数帮助:“RoundTo(1234567, 3)=1234000”是完全错误的,而且实际的运行结果跟我们小学时对四舍五入的理解完全一致:1235000。
blazingfire 7888 2004/8/18 19:43:02
这几行代码实在不敢公为。要效率没有效率
其实要达到这个功能很简单就可以实现的
wr960204 7886 2004/8/18 18:03:46
uses
  Math;
SimpleRoundTo函数就是四舍五入
shaoyy 7713 2004/8/11 14:40:14
溢出可以不用考虑,这种运算很平常啊,在实际中几乎碰不到一个real类型的数乘100后发生溢出的情况。
wataki 7694 2004/8/11 3:13:10
f := Trunc((f +  0.005) *100) /100
可能会溢出
shaoyy 7632 2004/8/8 3:39:16
呵呵,实现这功能还这么麻烦?其实不用RoundTo也可以简单实现:

f := Trunc((f +  0.005) *100) /100
suexy 7564 2004/8/5 13:12:00
只需要 format('%.2f',[FloattoStr(yourfloat)]就可以得到保留小数点后两位,且四舍五入。
aket 6821 2004/7/15 18:28:43
昨天测试发现一个问题,如下:
function SSWR(r: real): real;      
begin
  result := r*100+0.5;
  result := TRUNC(result)/100;
end;

function SSWR(r: real): real;
begin
  result := TRUNC(r*100+0.5)/100;
end;
结果不同,后则只能四舍六入,不知道为什么?
test004 6818 2004/7/15 16:35:27
真是好,想不到这个东西还这么有意义。
iamdream 6811 2004/7/15 15:09:50
以上的“故而如用RoundTo来四舍五入,则可在舍入位后的第二位加上5,如0.145,则加上0.0005,此时成为0.1455,再舍入时,就为0.15了!”应删去.
iamdream 6810 2004/7/15 15:05:33
以下是我研究的结果(Delphi6):
RoundTo(及Round)函数使用所谓“银行家舍入法”<Banker's Rounding>(对于舍入位后为5的情况,则舍入位为偶数,则舍,为奇数,则入),而Format函数则为正常的四舍五入法,取例如下:
0.145   RoundTo(0.145, -2) = 0.14
0.145   Format('%8.2f', 0.145) = 0.15
0.155   RoundTo(0.155, -2) = 0.16
0.155   Format('%8.2f', 0.155) = 0.16
另在进行浮点数的运算时,可能会出现0.14499999999999的情况,此时的值按数学上要求实际应为0.145,如用以上方法舍入到小数点后两位时,均不能达到想要的效果。
另SimpleRoundTo比RoundTo更接近四舍五入法,但不完全是四舍五入,如对0.145用SimpleRoundTo(0.145, -2)舍入时仍为0.14;
如果后面还有小数,如0.1450000001,此时舍入,则三者均为0.15!
对1.145,SimpleRoundTo舍入为1.15!
故而如用RoundTo来四舍五入,则可在舍入位后的第二位加上5,如0.145,则加上0.0005,此时成为0.1455,再舍入时,就为0.15了!
因此四舍五入取两位小数时,只要先加上0.0001,然后用RoundTo或SimpleRoundTo即可。
<2004.7.15>
aket 6800 2004/7/15 0:50:50
上面RoundTo(1.245+0.005, -2);有误,应该如下处理:
function SSWR(r: real): real;
begin
  result := r*100+0.5;
  result := TRUNC(result)/100;
end;
aket 6799 2004/7/15 0:46:18
将数字四舍五入保留两位小数不需要这么复杂,用下面这个就可以。
直接使用RoundTo函数,需要uses中加入math。
RoundTo(1.245, -2);  = 1.25

需要注意的是,旧的Delphi版本Round函数采用的是四舍六入,逢五的时候是前面是奇数才入,是偶数则不入,delphi手册帮助中的示例如下:
RoundTo(1234567, 3) 1234000
RoundTo(1.234, -2) 1.23
RoundTo(1.235, -2) 1.24
RoundTo(1.245, -2) 1.24

但delphi 7已经不是这样的了,是直接四舍五入的:RoundTo(1.245, -2) = 1.25。
为了兼容旧版本,可以处理下代码,加上0.005后在采用Round函数,如上例:
RoundTo(1.245+0.005, -2);
第一页 上一页 下一页 最后页 有 16 条纪录 共1页 1 - 16
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表