鱼C论坛

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

[已解决]手机qpython. 1/10为什么不等于0.1

[复制链接]
发表于 2017-8-12 10:41:55 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 suloman 于 2017-8-12 18:37 编辑

如题
最佳答案
2017-8-12 11:00:29
不仅手机上的python会出现这样的问题,其他平台上也会出现:
  1. >>> 1.2 + 1.2 + 1.2 - 3.6
  2. -4.440892098500626e-16
  3. >>> 1.1 + 2.2
  4. 3.3000000000000003
  5. >>> 1.0 - 1.0001
  6. -9.999999999998899e-05
复制代码
究其原因,
是因为小数以二进制形式表示时的有穷性导致的

其他更多关于二进制小数可参考知乎回答
  1. https://zhihu.com/question/25457573/answer/30851062
复制代码
那么怎么去解决:
  1. decimal - 十进制定点和浮点运算
复制代码

Python 官方文档中文翻译版:http://python.usyiyi.cn/documents/python_352/library/decimal.html#module-decimal


总之,二进制小数在计算机里面的存储是「不准确」的,可能有误差,可能拖很多9或者0,所以一般不强求默认的浮点数做到精度计算。
但如果一定要高精度计算,用「十进制小数」模块decimal,下面是官方给出的例子:
  1. >>> from decimal import *
  2. >>> getcontext().prec = 6
  3. >>> Decimal(1) / Decimal(7)
  4. Decimal('0.142857')
  5. >>> getcontext().prec = 28
  6. >>> Decimal('0.1428571428571428571428571429')
  7. Decimal('0.1428571428571428571428571429')
复制代码
Screenshot_2017-08-12-10-40-46-169_com.hipipal.qpy3.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-12 11:00:29 | 显示全部楼层    本楼为最佳答案   
不仅手机上的python会出现这样的问题,其他平台上也会出现:
  1. >>> 1.2 + 1.2 + 1.2 - 3.6
  2. -4.440892098500626e-16
  3. >>> 1.1 + 2.2
  4. 3.3000000000000003
  5. >>> 1.0 - 1.0001
  6. -9.999999999998899e-05
复制代码
究其原因,
是因为小数以二进制形式表示时的有穷性导致的

其他更多关于二进制小数可参考知乎回答
  1. https://zhihu.com/question/25457573/answer/30851062
复制代码
那么怎么去解决:
  1. decimal - 十进制定点和浮点运算
复制代码

Python 官方文档中文翻译版:http://python.usyiyi.cn/documents/python_352/library/decimal.html#module-decimal


总之,二进制小数在计算机里面的存储是「不准确」的,可能有误差,可能拖很多9或者0,所以一般不强求默认的浮点数做到精度计算。
但如果一定要高精度计算,用「十进制小数」模块decimal,下面是官方给出的例子:
  1. >>> from decimal import *
  2. >>> getcontext().prec = 6
  3. >>> Decimal(1) / Decimal(7)
  4. Decimal('0.142857')
  5. >>> getcontext().prec = 28
  6. >>> Decimal('0.1428571428571428571428571429')
  7. Decimal('0.1428571428571428571428571429')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-12 11:27:14 | 显示全部楼层
话说你这个手机python是从哪里搞的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-12 15:23:29 | 显示全部楼层
你好,
请问你手机上是怎么安装PYTHON的,可以告诉我一下么谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-12 18:37:01 From FishC Mobile | 显示全部楼层
shinemic 发表于 2017-8-12 11:00
不仅手机上的python会出现这样的问题,其他平台上也会出现:
究其原因,
其他更多关于二进制小数可参考知 ...

暂时没看懂 我先研究研究 谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-12 18:37:41 From FishC Mobile | 显示全部楼层
amanionly 发表于 2017-8-12 11:27
话说你这个手机python是从哪里搞的

百度 QPython
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-12 18:38:26 From FishC Mobile | 显示全部楼层
anziye 发表于 2017-8-12 15:23
你好,
请问你手机上是怎么安装PYTHON的,可以告诉我一下么谢谢啦

百度QPython3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-12 20:25:00 From FishC Mobile | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 09:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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