鱼C论坛

 找回密码
 立即注册
查看: 2946|回复: 7

[已解决]Python浮点误差的问题

[复制链接]
发表于 2016-11-14 15:54:10 | 显示全部楼层 |阅读模式
5鱼币
我在自定义函数,进行英尺与米的转换时,发现一个问题,在10001和11转换时,打印出的结果会有非常非常小的一个数出现,而在1001和101时却没有。请问这种结果是否会影响大数运算的结果?因为:用m(11)计算的结果去乘以1e+27,显示的结果是3.3528e+27,看上去没有影响。
我在网上找到的答案是:‘这是因为小数以二进制形式表示时的有穷性导致的’,看不懂。
我只要知道结果不影响运算,平时可以忽略它就行了,是吧?

程序和打印的结果分别如下所示:
--------------------------------------------------
def m(a):
    x=int(a)
    y=0.3048
    z=x*y
    return z
--------------------------------------------------
>>> m(10001)
3048.3048000000003
>>> m(1001)
305.1048
>>> m(101)
30.7848
>>> m(11)
3.3528000000000002
>>> m(11)*1e+27
3.3528e+27
>>>
最佳答案
2016-11-14 15:54:11
round
  1. >>> ich=.3048
  2. >>> 1001*ich
  3. 305.1048
  4. >>> 10001*ich
  5. 3048.3048000000003
  6. >>> round(10001*ich,4)
  7. 3048.3048
复制代码

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-14 15:54:11 | 显示全部楼层    本楼为最佳答案   
round
  1. >>> ich=.3048
  2. >>> 1001*ich
  3. 305.1048
  4. >>> 10001*ich
  5. 3048.3048000000003
  6. >>> round(10001*ich,4)
  7. 3048.3048
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-14 16:26:50 | 显示全部楼层
还是尽量避免浮点数运算,可以利用转换为字符串的方式解决精度问题,但是性能肯定就下降了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-14 18:16:02 | 显示全部楼层
围观
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-15 14:01:01 | 显示全部楼层

我知道round能精确到小数点后面的多少多少位,但是想问的是:在实际使用的时候,这个浮点误差是不是会被python自动忽略。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-15 14:02:24 | 显示全部楼层
三少爷 发表于 2016-11-14 16:26
还是尽量避免浮点数运算,可以利用转换为字符串的方式解决精度问题,但是性能肯定就下降了

有时没办法注意到这个转换,除非发现问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-17 10:44:15 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-12-27 10:16:24 | 显示全部楼层
围观学习围观学习围观学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-23 22:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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