发现Trunc函数错误 Trunc是取整函数,但不知为什么,本人在多台计算机上得出如下错误结果。大家不妨试试,知道答案的解析下Trunc(2.1* 100) / 100 得出的结果不是2.1而是2.09Trunc(4.7* 100) / 100 得出的结果不是4.7而是4.06有知道问题的朋友解析下吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 补充,是赋值时候出错。比如i:=2.4 Trunc(i) / 100 得出的结果不是2.1而是2.09i:=4.7 Trunc(i) / 100 得出的结果不是4.7而是4.06其他数值不会有错 2.1* 100的浮点结果是2.099999...trunc就是把小数部分扔掉了 参考http://wenku.baidu.com/view/b3a4df1fa300a6c30c229fd5.html 困惑,以下运算会出错的i:='2.1'或i:='4.7'floattostr(Trunc(strtofloat(trim(i)) * 100) / 100);得出的结果分别是2.09和4.06现在不止Trunc会出错。连round也会出错。难道真是浮点运算的问题吗?那么截取小数点后两位数应该怎样? 并不是Trunc的问题,而是计算机表示浮点数的问题因为计算机用的是2进制,而在计算机上保存的每一个数都是有受位数限制的,不可能是无穷大(小)的数所以与10进制相互转换的时候是有误差的,这只是精度的问题,误差是允许的可以忽略所以编程的时候,浮点数计算一般要格式化結果,或4舍5入前加个很小很小误差即可如:Trunc(2.1*100+0.00000000005)/100 sz_haitao朋友,我想请教,为什么2.1的浮点数是2.09999999.而2.3的浮点数不是2.29999999呢? 原来是这样。感谢kaikai_kk朋友的解析!!!很清晰明白。谢谢!!! 怎么播放后缀是mp6格式的文件 一个报错. 急救啊........ 用FastReport实现这样的报表,,,?? 求版主不要删——中国人必看(转载) 关于delphi7.0中rave的问题.超级难解决的哦 问一个简单问题:在ListBox选项上点击鼠标右健时,如何将该项设为当前选项? Enter键自动变成Tab键 ado连接远程服务器的sql server时,在哪里输入端口号的参数?(很急,有劳高手) 如何将数据库中的数据插入到树 Treeview 中 依然推荐大家使用IntraWeb idhttp.get如何才能不获取到过期的网页?
i:=2.4 Trunc(i) / 100 得出的结果不是2.1而是2.09
i:=4.7 Trunc(i) / 100 得出的结果不是4.7而是4.06
其他数值不会有错
trunc就是把小数部分扔掉了
http://wenku.baidu.com/view/b3a4df1fa300a6c30c229fd5.html
i:='2.1'或i:='4.7'
floattostr(Trunc(strtofloat(trim(i)) * 100) / 100);
得出的结果分别是2.09和4.06
现在不止Trunc会出错。连round也会出错。难道真是浮点运算的问题吗?那么截取小数点后两位数应该怎样?
因为计算机用的是2进制,而在计算机上保存的每一个数都是有受位数限制的,不可能是无穷大(小)的数
所以与10进制相互转换的时候是有误差的,这只是精度的问题,误差是允许的可以忽略所以编程的时候,浮点数计算一般要格式化結果,或4舍5入前加个很小很小误差即可
如:Trunc(2.1*100+0.00000000005)/100
sz_haitao朋友,我想请教,为什么2.1的浮点数是2.09999999.而2.3的浮点数不是2.29999999呢?
原来是这样。感谢kaikai_kk朋友的解析!!!很清晰明白。谢谢!!!