将数字四舍五入保留两位小数
来源:互联网 发布:软件质量特性 编辑:程序博客网 时间:2024/05/08 22:59
评论:将数字四舍五入保留两位小数
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);
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;
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>
iamdream 6811 2004-7-15 15:09:50
以上的“故而如用RoundTo来四舍五入,则可在舍入位后的第二位加上5,如0.145,则加上0.0005,此时成为0.1455,再舍入时,就为0.15了!”应删去.
test004 6818 2004-7-15 16:35:27
真是好,想不到这个东西还这么有意义。
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;
结果不同,后则只能四舍六入,不知道为什么?
suexy 7564 2004-8-5 13:12:00
只需要 format('%.2f',[FloattoStr(yourfloat)]就可以得到保留小数点后两位,且四舍五入。
shaoyy 7632 2004-8-8 3:39:16
呵呵,实现这功能还这么麻烦?其实不用RoundTo也可以简单实现:
f := Trunc((f + 0.005) *100) /100
wataki 7694 2004-8-11 3:13:10
f := Trunc((f + 0.005) *100) /100
可能会溢出
shaoyy 7713 2004-8-11 14:40:14
溢出可以不用考虑,这种运算很平常啊,在实际中几乎碰不到一个real类型的数乘100后发生溢出的情况。
wr960204 7886 2004-8-18 18:03:46
uses
Math;
SimpleRoundTo函数就是四舍五入
blazingfire 7888 2004-8-18 19:43:02
这几行代码实在不敢公为。要效率没有效率
其实要达到这个功能很简单就可以实现的
qian8233 7911 2004-8-19 18:34:15
由于对系统函数的了解太少,出现这种情况是可以理解的;
对于delphi7中的roundto函数帮助:“RoundTo(1234567, 3)=1234000”是完全错误的,而且实际的运行结果跟我们小学时对四舍五入的理解完全一致:1235000。
web700 11867 2005-1-18 11:39:36
function intdata(d:double):double;
begin
result:=int((d+0.5)*100/100);
end;
tinysoft 12854 2005-2-25 21:09:13
看了大家的方法,我还是喜欢用Format函数!
gz818 21140 2006-1-20 17:43:52
delphi7 下如何四舍六入五单双?
懵: (39281533) 15:06:48
type
TRoundToRange = -37..37;
function MyRoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
var
LFactor: Double;
begin
LFactor := IntPower(10, ADigit);
Result := Trunc(AValue / LFactor + 0.5) * LFactor;
end;
懵: (39281533) 15:06:57
但是要引用Math单元
- 将数字四舍五入保留两位小数
- 四舍五入保留两位小数
- 四舍五入保留两位小数
- java 小数四舍五入 保留两位小数
- java 四舍五入后保留两位小数
- 保留两位小数即四舍五入
- 新JS四舍五入保留两位小数
- JS保留两位小数 四舍五入函数
- JavaScript四舍五入保留两位小数
- 保留四舍五入后的两位小数
- JavaScript四舍五入保留两位小数
- JS保留两位小数 四舍五入函数
- JS保留两位小数 四舍五入函数
- java四舍五入保留两位小数
- js 保留两位小数,不要四舍五入
- JS保留两位小数 四舍五入函数
- Java四舍五入保留两位小数
- JS保留两位小数 四舍五入函数
- 如何在外置USB硬盘中安装ubuntu
- 《EDA工程的理论与实践——SOC系统芯片设计》前言
- DB2数据库锁的问题
- SQL注入攻击的原理及其防范措施
- 访问控制(kasai)的改进
- 将数字四舍五入保留两位小数
- 精通Hibernate 读后
- MYSQL 错误:Client does not support authentication protocol requested by server;
- 生成缩略图+水印的方法
- jsp使用URL编码传递中文参数问题
- String
- VS.NET在生成安装和部署项目时收到"不可恢复的致命错误"的解决办法
- Robots协议详解
- 小巧的驱动测试工具