鱼C论坛

 找回密码
 立即注册
查看: 3557|回复: 17

Python中的float问题

[复制链接]
发表于 2016-4-30 17:33:43 | 显示全部楼层 |阅读模式

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

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

x
不知道大家知不知道这个问题,我今天使用的时候发现的,不知道怎么解决

@~风介~
@冬雪雪冬
2016-04-30_173246.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-1 11:04:53 | 显示全部楼层
lz看下浮点数的算法就知道了怎么回事了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-1 22:11:13 | 显示全部楼层
因为浮点型的数据在python中进行计算会转化为2进制 进行,比如0.3 的二进制为0100110011001100.........表示的时候是无限循环的,但是计算机的内存是有限的,在有限的位数下最后一位会在进行四舍五入的操作,所以就会导致制种情况的发生,例如下边的这个例子:
  1. sum = 0.0
  2. for i in range(10):
  3.      sum+=0.1
  4. print(sum)
  5. #结果是0.999999999999999999999
复制代码

这样子的结果中也是这个原因造成的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-30 18:34:50 | 显示全部楼层
这不是数据溢出吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-30 18:44:51 | 显示全部楼层
www.han 发表于 2016-4-30 18:34
这不是数据溢出吗?

不懂,这是为什么啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-30 21:13:56 | 显示全部楼层
同不懂,求解
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-30 22:05:00 | 显示全部楼层
  1. from decimal import *
  2. getcontext().prec = 3
  3. r = Decimal(1.1) + Decimal(1.01)
  4. print(r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-30 22:33:07 | 显示全部楼层

能解释一下getcontext().prec = 3 是什么意思吗?谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-30 23:02:02 | 显示全部楼层
WylLy 发表于 2016-4-30 22:33
能解释一下getcontext().prec = 3 是什么意思吗?谢谢了

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

使用道具 举报

 楼主| 发表于 2016-4-30 23:11:56 | 显示全部楼层

RE: Python中的float问题


那这样也解决不了问题啊,那如果是1.001+1.11,这样答案也不对啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-30 23:15:05 | 显示全部楼层
WylLy 发表于 2016-4-30 23:11
那这样也解决不了问题啊,那如果是1.001+1.11,这样答案也不对啊

getcontext().prec = 4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-1 08:14:52 | 显示全部楼层

这个只能解决单个的问题,而不能彻底解决问题啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-1 11:01:17 | 显示全部楼层
这是由于计算机的浮点数字表示导致的,在计算机中,浮点数以二进制形式表示,例如 0.75 就是 0.11 而绝大部分的浮点数并不能由二进制精确表出,例如:0.49。这就导致计算机会将简单的10进制数向后扩展很多位,例如c语言默认貌似是七位,不太记得了233,解决办法不清楚,本人Python也是渣渣,期待大神。  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-1 11:33:35 | 显示全部楼层
galen111 发表于 2016-5-1 11:04
lz看下浮点数的算法就知道了怎么回事了

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

使用道具 举报

 楼主| 发表于 2016-5-2 08:25:52 | 显示全部楼层
qq2576427955 发表于 2016-5-1 22:11
因为浮点型的数据在python中进行计算会转化为2进制 进行,比如0.3 的二进制为0100110011001100.........表 ...

多谢,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-2 11:25:26 | 显示全部楼层
找到解决办法了,如图 C6DA98BA-4BEA-48E1-9333-979EF4EF5294.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-2 12:11:12 | 显示全部楼层
kmh 发表于 2016-5-2 11:25
找到解决办法了,如图

好,多谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-5 09:23:15 | 显示全部楼层
计算机的浮点数字表示导致的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 22:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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