鱼C论坛

 找回密码
 立即注册
查看: 1838|回复: 18

[已解决]int(9.99999999999999999999999)为什么是10

[复制链接]
发表于 2020-6-25 00:52:27 | 显示全部楼层 |阅读模式

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

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

x
如题。。。我发现当加了很多位小数后变成了10,而不是9.这是为什么,因为这个原因,在之后使用这个函数是不是有什么要注意的?
最佳答案
2020-6-25 08:38:11
青出于蓝 发表于 2020-6-25 08:23
ipad pythonIDEA3与你这个不一样喔




如果是你说这样的话,这个可能和电脑位数,编译器不同版本,系统有关系吧

但是楼主不必纠结于此,也不需要注意什么,你想想超出15位小数是什么概念,非常非常大了精确度了

我们正常情况都不会用精确度这么高精度的计算,你如果真的需要算这么精确的数字,应该也用不着 Python ,又或者说用其他什么神奇的工具?

没事,正常我们使用就这样了,Python 默认的小数,看看下面的:
>>> 2.3333333333333333
2.3333333333333335

大于15位小数时候 Python 就有误差了,自动增大了,这也是导致你为什么 int 会进 1 的原因吧

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-25 07:30:41 | 显示全部楼层
还挺有意思,应该是数大了以后就理解成了9循环?
9循环等于1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-25 07:32:17 | 显示全部楼层
其实int也是能四舍五入的,例如
int(3.6)
打印3
imt(3.6+0.5)
打印4
想要四舍五入,只需加0.5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 07:47:05 | 显示全部楼层
经过一系列实验,发现python浮点数超过15位,就会当作循环小数处理~
可以打印22/7看看
所以,9.99999999999999是10,也不奇怪了。
求最佳~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:01:39 | 显示全部楼层
青出于蓝 发表于 2020-6-25 07:32
其实int也是能四舍五入的,例如
想要四舍五入,只需加0.5

'imt'?
'int'!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:04:51 From FishC Mobile | 显示全部楼层
int后小数位在15位以内不不进位,超过15位的就进位!
Screenshot_20200625_080240_com.hipipal.qpy3.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:06:18 | 显示全部楼层
青出于蓝 发表于 2020-6-25 07:47
经过一系列实验,发现python浮点数超过15位,就会当作循环小数处理~
可以打印22/7看看
所以,9.99999999 ...

计算机中不存在循环小数。
建议说话之前多验证一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-25 08:09:24 | 显示全部楼层
这个东西应该是跟编译器机制有关。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:16:24 | 显示全部楼层
一切奥秘都在机器语言中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:18:21 | 显示全部楼层
heidern0612 发表于 2020-6-25 08:09
这个东西应该是跟编译器机制有关。

指的是编译 Python3 的编译器吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:18:58 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-6-25 08:18
指的是编译 Python3 的编译器吗


嗯,我记得不同的编译器,好像精确度不一样,小整数池也不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:22:52 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-6-25 08:06
计算机中不存在循环小数。
建议说话之前多验证一下。

只取前15位。当小数到一定大时,就会进1?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:23:25 | 显示全部楼层
xizi123 发表于 2020-6-25 08:04
int后小数位在15位以内不不进位,超过15位的就进位!

ipad pythonIDEA3与你这个不一样喔
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:38:11 | 显示全部楼层    本楼为最佳答案   
青出于蓝 发表于 2020-6-25 08:23
ipad pythonIDEA3与你这个不一样喔




如果是你说这样的话,这个可能和电脑位数,编译器不同版本,系统有关系吧

但是楼主不必纠结于此,也不需要注意什么,你想想超出15位小数是什么概念,非常非常大了精确度了

我们正常情况都不会用精确度这么高精度的计算,你如果真的需要算这么精确的数字,应该也用不着 Python ,又或者说用其他什么神奇的工具?

没事,正常我们使用就这样了,Python 默认的小数,看看下面的:
>>> 2.3333333333333333
2.3333333333333335

大于15位小数时候 Python 就有误差了,自动增大了,这也是导致你为什么 int 会进 1 的原因吧

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:55:26 | 显示全部楼层
Twilight6 发表于 2020-6-25 08:38
如果是你说这样的话,这个可能和电脑位数,编译器不同版本,系统有关系吧

但是楼主不必纠结于此 ...

Python 的高精还是很好用的
from decimal import Decimal
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:57:38 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-6-25 08:55
Python 的高精还是很好用的

嗯嗯 我都忘了还有这个模块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 08:58:27 | 显示全部楼层
并不是每个浮点数计算机都能表示,只能把不能精确表示的,“靠”到某一个能表示的数字上。
>>> a = 9.99999999999999999999999
>>> a
10.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 09:00:38 | 显示全部楼层
应该Python3只能读到小数点后15位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-25 09:52:31 | 显示全部楼层
哇(⊙o⊙),竟然int不只是舍1,还有循环进一,学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 10:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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