社区
语言基础/算法/系统设计
帖子详情
发现Trunc函数错误
gzmitch
2012-03-16 03:52:07
Trunc是取整函数,但不知为什么,本人在多台计算机上得出如下错误结果。大家不妨试试,知道答案的解析下
Trunc(2.1* 100) / 100 得出的结果不是2.1而是2.09
Trunc(4.7* 100) / 100 得出的结果不是4.7而是4.06
有知道问题的朋友解析下吗?
...全文
279
10
打赏
收藏
发现Trunc函数错误
Trunc是取整函数,但不知为什么,本人在多台计算机上得出如下错误结果。大家不妨试试,知道答案的解析下 Trunc(2.1* 100) / 100 得出的结果不是2.1而是2.09 Trunc(4.7* 100) / 100 得出的结果不是4.7而是4.06 有知道问题的朋友解析下吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gzmitch
2012-03-16
打赏
举报
回复
[Quote=引用 7 楼 kaikai_kk 的回复:]
并不是Trunc的问题,而是计算机表示浮点数的问题
因为计算机用的是2进制,而在计算机上保存的每一个数都是有受位数限制的,不可能是无穷大(小)的数
所以与10进制相互转换的时候是有误差的,这只是精度的问题,误差是允许的可以忽略
所以编程的时候,浮点数计算一般要格式化結果,或4舍5入前加个很小很小误差即可
如:Trunc(2.1*100+0.00000000005)/100
[/Quote]
原来是这样。感谢kaikai_kk朋友的解析!!!很清晰明白。谢谢!!!
kaikai_kk
2012-03-16
打赏
举报
回复
[Quote=引用 8 楼 gzmitch 的回复:]
引用 2 楼 sz_haitao 的回复:
2.1* 100的浮点结果是2.099999...
trunc就是把小数部分扔掉了
sz_haitao朋友,我想请教,为什么2.1的浮点数是2.09999999.而2.3的浮点数不是2.29999999呢?
[/Quote]
最终运算要通过计算机转成2进制运算
你试试用笔算0.1转成2进制精确到8位,然后再把这8位2进制数转成10进制,看看结果是多少
同理再算算0.3吧,你会发现这样转换后不能复原成原來的10进制数
不用太纠结这些东西了!!!
gzmitch
2012-03-16
打赏
举报
回复
[Quote=引用 2 楼 sz_haitao 的回复:]
2.1* 100的浮点结果是2.099999...
trunc就是把小数部分扔掉了
[/Quote]
sz_haitao朋友,我想请教,为什么2.1的浮点数是2.09999999.而2.3的浮点数不是2.29999999呢?
kaikai_kk
2012-03-16
打赏
举报
回复
并不是Trunc的问题,而是计算机表示浮点数的问题
因为计算机用的是2进制,而在计算机上保存的每一个数都是有受位数限制的,不可能是无穷大(小)的数
所以与10进制相互转换的时候是有误差的,这只是精度的问题,误差是允许的可以忽略
所以编程的时候,浮点数计算一般要格式化結果,或4舍5入前加个很小很小误差即可
如:Trunc(2.1*100+0.00000000005)/100
gzmitch
2012-03-16
打赏
举报
回复
困惑,以下运算会出错的
i:='2.1'或i:='4.7'
floattostr(Trunc(strtofloat(trim(i)) * 100) / 100);
得出的结果分别是2.09和4.06
现在不止Trunc会出错。连round也会出错。
难道真是浮点运算的问题吗?那么截取小数点后两位数应该怎样?
somemak
2012-03-16
打赏
举报
回复
参考
http://wenku.baidu.com/view/b3a4df1fa300a6c30c229fd5.html
somemak
2012-03-16
打赏
举报
回复
[Quote=引用 2 楼 sz_haitao 的回复:]
2.1* 100的浮点结果是2.099999...
trunc就是把小数部分扔掉了
[/Quote]
+1
我看见佛
2012-03-16
打赏
举报
回复
2.1* 100的浮点结果是2.10000才对呀,我现在也困惑
haitao
2012-03-16
打赏
举报
回复
2.1* 100的浮点结果是2.099999...
trunc就是把小数部分扔掉了
gzmitch
2012-03-16
打赏
举报
回复
补充,是赋值时候出错。比如
i:=2.4 Trunc(i) / 100 得出的结果不是2.1而是2.09
i:=4.7 Trunc(i) / 100 得出的结果不是4.7而是4.06
其他数值不会有错
会计实务:Excel四舍五入、不四舍五入或取整的相关
函数
(1).doc
TR
UNC
函数
:截断
函数
,
TR
UNC
函数
将数字的小数部分直接截断,而不进行四舍五入处理。例如,
TR
UNC
(3.6, 0)的结果是3,但
TR
UNC
(3.6, 1)的结果是3.6,因为截断点是小数点后第一位。 INT
函数
:取整
函数
,该
函数
将数字向...
python中
tr
unc
函数
_
tr
unc
函数
oracle中的
tr
unc
函数
操作1.
TR
UNC
(for dates)
TR
UNC
函数
为指定元素而截去的日期值。其具体的语法格式如下:
TR
UNC
(date[,fmt])其中:date 一个日期值fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的...
Oracle
tr
unc
()
函数
详解
Oracle
tr
unc
()
函数
详解
MySQL里和
tr
unc
函数
相同的_MySQL与Oracle差异比较之三
函数
MySQL与Oracle 差异比较之三
函数
函数
编号 类别 ORACLE MYSQL 注释1 数字
函数
round(1.23456,4) round(1.23456,4) 一样:ORACLE:select round(1.23456,4) value from dualMYSQL:select round(1.23456,4) value2 ab....
记录一次OPDS
tr
unc
()
函数
使用
错误
记录一次OPDS
tr
unc
()
函数
使用
错误
语言基础/算法/系统设计
16,743
社区成员
33,238
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章