delphi的bug?(50分)

  • 主题发起人 主题发起人 jack_4826
  • 开始时间 开始时间
J

jack_4826

Unregistered / Unconfirmed
GUEST, unregistred user!
关于四舍五入,只要小数前一位为偶数,小数前一位为5,就有错误
如:
round(2.5)=2

round(3.5)=4
为什么??
高手帮助!
 
不是,你看看Delphi的帮助就知道了。
 
X is a real-type expression. Round returns an Int64 value that is the value of X rounded to the nearest whole number.
If X is exactly halfway between two whole numbers,
the result is always the even number.
 
我还是不明白?
那怎么实现真正意义上的四舍五入呢?
 
自己来实现。呵呵。
 
trunc(2.5+0.5)
 
悲哀啊!
borland的也太差了!!
 
truac也不对呀
 
救命啊,报表怎么实现啊??
 
代码:
function MyRound(Num: Real): Integer;
var Tmp: Real;
begin
  Tmp := Num + 0.5;
  If Tmp < Trunc(Num) + 1 Then
    Result := Trunc(Num)
  Else Result := Trunc(Num) + 1;
end;
 
其实四舍五入还可以用format函数实现,
大家不要误会,
我只是想和大家讨论一下round函数,
它既然不是四舍五入函数,那它用来干什么?
 
开什么玩笑?楼上不要乱说。
难道你们不知道新的四舍五入的规则吗?就是使结果为偶数啊,这是从概率论角度考虑的
所以 Delphi 的 Round 没有任何问题,骂 Borland 有什么用:(
 
delphi的帮助中有说明,round的结果是向偶数靠齐的.
 
delphi新特性,“银行家”算法
 
是啊,我们学误差分析的时候,也有所谓的 四舍五入凑偶原则
 
对于正数 x
function Rd(x:Real):integer;
begin
result:=(int(10*x)+5) div 10
end;

再考虑一个负数不就可以了,如果要舍入到几位小数,可以乘 100,1000,...
 
后退
顶部