delphi 四舍五入的坑

2021-03-07 04:26

阅读:529

标签:lse   表达   net   等于   传统   dig   算法   float   nbsp   

var
d:Double;
begin
// ShowMessage(FloatToStr(RoundTo(17.165,-2))+‘________‘+FloatToStr(RoundTo(17.165*100.0,0)/100.0)+
// ‘________‘+FormatFloat(‘0.00‘,17.165));
// //17.16________17.16________17.17
// ShowMessage(FloatToStr(RoundTo(33.015,-2))+‘________‘+FloatToStr(RoundTo(33.015*100.0,0)/100.0)+
// ‘________‘+FormatFloat(‘0.00‘,33.015));
// //33.01________33.02________33.02
// ShowMessage(FloatToStr(RoundTo(1.165,-2))+‘________‘+FloatToStr(RoundTo(1.165*100.0,0)/100.0)+
// ‘________‘+FormatFloat(‘0.00‘,1.165));
// //1.17________1.16________1.17
d:=1.005;
ShowMessage(FloatToStr(RoundTo(d,-2))+‘________‘+FloatToStr(RoundTo(d*100.0,0)/100.0)+
‘________‘+FormatFloat(‘0.00‘,d)+‘________‘+FormatFloat(‘0.00‘,StrToFloat(FloatToStr(d))));
//1________1________1.00________1.01

//在DELPHI中Round()和RoundTo()都是四舍五入的函数,但DELPHI用的四舍五入与一般的四舍五入不同,它采用的是四舍六入五留双。
//
//即当舍或入位大于或小于五时按四舍五入来处理,而当舍或入位等于五时,就要看前面一位是什么,根据奇进偶不进,它总是返回一个偶数值。
//
//这种算法其实是按照银行家算法,统计学上一般都用这种算法,比传统的"四舍五入"要科学。在VB、.net相关的语言中都有这个问题。
//
//例如:
//
//表达式 返回值
//
//Round(11.5) 12
//
//Round(10.5) 10
//
//RoundTo(1234567, 3) 1234000
//
//RoundTo(1.234, -2) 1.23
//
//RoundTo(1.235, -2) 1.24
//
//RoundTo(1.245, -2) 1.24
//
//如果要使用传统的"四舍五入"方法,可以使用下面函数:
//
//function RoundEx(R: Real): Int64;
//
//begin
//
//Result:= Trunc(R);
//
//if Frac(R) >= 0.5 then
//
//Result:= Result + 1;
//
//end;
//
//function DRound(const Value: Extended; const Digit: Byte = 0): Extended;
//
//var
//
//tmp: Extended;
//
//begin
//
//tmp := Power(10, Digit);
//
//if Value > 0 then
//
//Result := Value * tmp + 0.5
//
//else
//
//Result := Value * tmp - 0.5;
//
//Result := Trunc(Result) / tmp;
//
//end;

end;

 

综上所述 推荐使用:FormatFloat(‘0.00‘,StrToFloat(FloatToStr(d)))

delphi 四舍五入的坑

标签:lse   表达   net   等于   传统   dig   算法   float   nbsp   

原文地址:https://www.cnblogs.com/530263009QQ/p/12838238.html


评论


亲,登录后才可以留言!