4舍5入的函数是什么(100分)

  • 主题发起人 usa112233
  • 开始时间
U

usa112233

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi6中,想保留小数点后2位数字,4舍5入的函数是什么?我用了RoundTo和SimpleRoundTo两个函数都有问题。
a:=27686.745
b:=38222.295
RoundTo(a):=27686.74,应为27686.75
SimpleRoundTo(b):=38222.29应为38222.30
 
Trunc(a * 100 + 0.5) / 100
 
Round不就行了吗?
 
Round不行,用ShowMessage(FloatToStr(round(0.5))) 试一下就知道了
 
delphi 的round 函数有问题的,自己做一个吧
 
RoundTo(a:=27686.7455,-3):=27686.746的。
就会正确的。
但是:RoundTo(a):=27686.74,应为27686.75 也会发生的。
呵呵,只好你自己添加代码控制了。
如果使用SQL Server 2000 ,你是用于存储。
可以在SQL语句中使用Round的。
 
round采用的是BANKER算法
 
roundto 可以的
但是请注意,不要 去 计算 经过计算过的 数值。
比如:
Const
TestInt: Double = 134.565;
begin
ShowMessage(FloatToStr(RoundTo(TestInt,-2)));
end;
总上,这个函数不能用,自己写吧,建议 字符串 位数 分割 ,呵呵!
 
这很容易解决,通过formatfloat函数吧,比如说 formatfloat('0.00',27686.745)
结果就是你想要的了。
 
看我的帖子,终极答案.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1049035
 
刚刚看楼上那位仁兄的贴子,但我有有个更好的答案。
function MyRound(x:Float,y:precision):Float;
begin
x:=(Power(x,y)+0.5)/Power(x,y)
end;
不知大家意下如何.
 
楼上的 包括各位 测试一下这个(只以楼上的举例,看看你的函数是否通过)
function MyRound(x:Double;y:Integer):Double;
begin
x:=(Power(x,y)+0.5)/Power(x,y)
end;

ShowMessage(FloatToStr(MyRound(1.2345*100,-1)));
 
自己写吧!我以前也是自己写的,delphi自带的遇到.5训不好用。
你如要,我有时间贴上来。
 
函数是行的。是数据库定义不精确!
如果发现有此类问题请做如下操作:
精确偏移量:=0.00000000001;
round(你的数值*100+精确偏移量)/100;
精确偏移量的值根据你的精确位数可适当调整
 
银行家算法是更科学的算法,比四舍五入要好一些
 
自己写一个函数吧
function RoundDecimal(num: real; i: integer): Real;i表示保留几位小数
var
j:integer;
begin
for j :=0 to i-1 do
Num :=Num*10;
Num :=Round(Num);
for j:=0 to i-1 do
Num :=Num/10;
result :=Num;
end;
 
delphi5的round 函数有bug
看下面的:
function DoRound(Value: Extended): Int64;

procedure Set8087CW(NewCW: Word);
asm
MOV Default8087CW,AX
FNCLEX
FLDCW Default8087CW
end;

const
RoundUpCW = $1B32;
var
OldCW : Word;
begin
OldCW := Default8087CW;
try
Set8087CW(RoundUpCW);
Result := Round(Value);
finally
Set8087CW(OldCW);
end;
end;

 

Similar threads

S
回复
0
查看
955
SUNSTONE的Delphi笔记
S
S
回复
0
查看
776
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部