在彩票行业许多年,这次对于竞彩玩法的计奖,让我很是头疼。Delphi中double类型的四舍五入总是出问题,小数点后1-4,6-9都没有问题,就是.5时总出现不进位的问题。
round函数用的是银行家算法,不好使。
roundTo也不好使。
什么Format呀,
result := int(value * 100 + 0.5) / 100;
全都统统不好用。
后面弄明白原因了,许多时候计算的结果为:17.145,但事实上是17.1449999999等,这时你再四舍五入两位结果就不对,尤其是钱。呵呵
在网上终于猎杀到一个高手的算法,大家分享下:
class function TNewDcFunc.RoundFloat(f:double;i:integer):double;
var
s:string;
ef:extended;
begin
s:='#.'+ StringOfChar('0',i);
ef:=StrToFloat(FloatToStr(f));//防止浮点运算的误差
result:=StrToFloat(FormatFloat(s,ef));
end;
真心感谢这位高手,也希望能带给其他需要的人一些帮助。对了,Java也有类似的问题,要注意哟!
分享到:
相关推荐
不同于银行家算法,真正做到四舍五入,符合中国人的使用习惯,并且可自定义保留小数的位数。并且能够对参数值做错误判断。
Delphi四舍五入函数。
DELPHI最完美的四舍五入无BUG函数,是我花费了2天研究出来的成果,完美保留1-4个小数点,包内提供有EXCEL表取值可以把计算结果复制出来做结果对比,我已经随机取了十几万记录做对比,居然无一值和EXCEL的函数保留有...
在delphi中真正实现四舍五入,比较format,round等方法,真正实现四舍五入
Delphi 本身的Format函数四舍五入和财务中四舍五入不一样,所以自己写了一个四舍五入函数,请参考
解决delphi四舍五入问题.delphi中的四舍五入一直没有好的控件,只有自己试试了。
delphi7 FormatFloat 四舍五入时,某些情况下不进一,测试代码如下 procedure TForm1.FormShow(Sender: TObject); var a:double; begin a:=16.685; showmessage(formatfloat('0.00',a)); application.Terminate; ...
用于解决Delphi四舍五入的银行家算法。得出结果为四舍五入而不是四舍六入,奇进偶不进。
用ROUND不能实现我们日常意义的四舍五入,round是一种银行家的算法,四舍六入,五看寄偶。与我们日常习惯不一样。
Delphi 中串口通讯的实现Delphi 中串口通讯的实现
Delphi 中串口通讯的实现 Delphi 中串口通讯的实现 Delphi 中串口通讯的实现
在网上找到一个四舍五入函数,当输入100,1000,10000,…等时,其会变成0.1,修改后,不会出现。
Delphi7中Memo组件实现查找替换功能
【delphi_文章】delphi的取整函数round、trunc、ceil和floor.doc
Delphi-控件实现NTP客户端校时功能Delphi-控件实现NTP客户端校时功能Delphi-控件实现NTP客户端校时功能Delphi-控件实现NTP客户端校时功能Delphi-控件实现NTP客户端校时功能Delphi-控件实现NTP客户端校时功能Delphi-...
delphi 真正实现实现pagecontrol多文档界面,1、解决生成form不能自适应问题,2、解决form间相互操作对方控件的问题
在Delphi中利用多线程实现数据采集的方法.doc
Delphi实现软件中登录用户的操作权限
在delphi中实现任意类型的三元运算函数ThreeAsk。就像c或c++中的三元运算一样。 用法:任意类型 = ThreeAsk(boolen,任意类型,任意类型);
在delphi中使用listview控件,启用checkbox选项后,默认是多选,此示例实现单选功能,在Delphi7下测试通过。