鱼C论坛

 找回密码
 立即注册
查看: 2250|回复: 5

[已解决](新手求助)关于linux系统下的python中函数round()问题

[复制链接]
发表于 2017-7-20 17:05:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 handsome-wind 于 2017-7-20 17:06 编辑

使用函数round()对数值进行数值小数点取舍,为什么是这样的,时而正确操作,时而显示小数点后16位?
(python是2.6版本的,在linux系统下运行。)

>>> round (16.22354, 2)
16.219999999999999
>>> round (7.564332, 3)
7.5640000000000001
>>> round (113.0625, 2)
113.06
最佳答案
2017-7-20 17:38:28
这个不是round函数的问题,而是计算机无法精确表示小数的问题,这个是通病,和python无关也和系统无关。
在计算机中,小数若无法用二进制精确表示,都是近似表示的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-20 17:38:28 | 显示全部楼层    本楼为最佳答案   
这个不是round函数的问题,而是计算机无法精确表示小数的问题,这个是通病,和python无关也和系统无关。
在计算机中,小数若无法用二进制精确表示,都是近似表示的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-7-20 17:59:38 | 显示全部楼层
由于最终计算的时候都是用二进制进行计算的
所以就存在将十进制转为二进制的过程
然而并不是所有的十进制小数都能精确的转为二进制的,(有点类似于1/3和0.333333……的样子)
所以当十进制非精确的转为二进制的后,在转回十进制进行输出就会出现你所描述的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-7-20 18:03:42 | 显示全部楼层
round函数是取浮点数x的四舍五入值,语法是round(x[,n]),其中的n是表示取的浮点数的个数。
有时候,python函数,也不能得到需要的特殊值,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-21 09:17:52 | 显示全部楼层
jerryxjr1220 发表于 2017-7-20 17:38
这个不是round函数的问题,而是计算机无法精确表示小数的问题,这个是通病,和python无关也和系统无关。
...

那么这个问题无视就行了?默认它的表达式正确的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-21 10:33:25 | 显示全部楼层
handsome-wind 发表于 2017-7-21 09:17
那么这个问题无视就行了?默认它的表达式正确的?

本来就是正确的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 21:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表