258947758 发表于 2020-6-25 00:52:27

int(9.99999999999999999999999)为什么是10

如题。。。我发现当加了很多位小数后变成了10,而不是9.这是为什么,因为这个原因,在之后使用这个函数是不是有什么要注意的?

青出于蓝 发表于 2020-6-25 07:30:41

还挺有意思,应该是数大了以后就理解成了9循环?
9循环等于1

青出于蓝 发表于 2020-6-25 07:32:17

其实int也是能四舍五入的,例如int(3.6)
打印3imt(3.6+0.5)
打印4
想要四舍五入,只需加0.5

青出于蓝 发表于 2020-6-25 07:47:05

经过一系列实验,发现python浮点数超过15位,就会当作循环小数处理~
可以打印22/7看看
所以,9.99999999999999是10,也不奇怪了。
求最佳~

lijiachen 发表于 2020-6-25 08:01:39

青出于蓝 发表于 2020-6-25 07:32
其实int也是能四舍五入的,例如
想要四舍五入,只需加0.5

'imt'?
'int'!

xizi123 发表于 2020-6-25 08:04:51

int后小数位在15位以内不不进位,超过15位的就进位!

永恒的蓝色梦想 发表于 2020-6-25 08:06:18

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

计算机中不存在循环小数。
建议说话之前多验证一下。

heidern0612 发表于 2020-6-25 08:09:24

这个东西应该是跟编译器机制有关。

fencyhe 发表于 2020-6-25 08:16:24

一切奥秘都在机器语言中

永恒的蓝色梦想 发表于 2020-6-25 08:18:21

heidern0612 发表于 2020-6-25 08:09
这个东西应该是跟编译器机制有关。

{:10_277:}指的是编译 Python3 的编译器吗

heidern0612 发表于 2020-6-25 08:18:58

永恒的蓝色梦想 发表于 2020-6-25 08:18
指的是编译 Python3 的编译器吗

嗯,我记得不同的编译器,好像精确度不一样,小整数池也不一样。

青出于蓝 发表于 2020-6-25 08:22:52

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

只取前15位。当小数到一定大时,就会进1?

青出于蓝 发表于 2020-6-25 08:23:25

xizi123 发表于 2020-6-25 08:04
int后小数位在15位以内不不进位,超过15位的就进位!

ipad pythonIDEA3与你这个不一样喔

Twilight6 发表于 2020-6-25 08:38:11

青出于蓝 发表于 2020-6-25 08:23
ipad pythonIDEA3与你这个不一样喔



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

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

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

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

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

永恒的蓝色梦想 发表于 2020-6-25 08:55:26

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

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

Python 的高精还是很好用的from decimal import Decimal

Twilight6 发表于 2020-6-25 08:57:38

永恒的蓝色梦想 发表于 2020-6-25 08:55
Python 的高精还是很好用的

嗯嗯 我都忘了还有这个模块

冬雪雪冬 发表于 2020-6-25 08:58:27

并不是每个浮点数计算机都能表示,只能把不能精确表示的,“靠”到某一个能表示的数字上。
>>> a = 9.99999999999999999999999
>>> a
10.0

aaron.yang 发表于 2020-6-25 09:00:38

应该Python3只能读到小数点后15位{:10_277:}

小甲鱼的铁粉 发表于 2020-6-25 09:52:31

哇(⊙o⊙),竟然int不只是舍1,还有循环进一,学到了
页: [1]
查看完整版本: int(9.99999999999999999999999)为什么是10