Python使用什么舍入规则将浮点转换为整数?

2024-06-26 05:54:33 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:在发布这个问题后,很明显,我对旧语言中发生的事情的记忆是错误的,没有根本的区别,正如我刚刚通过运行等效的Fortran程序验证的那样。简而言之,我的前提是不正确的。我决定把这个问题留给其他有相关问题的人去看答案

原始帖子:与我使用过的早期编程语言(Fortran、C、IDL等)相比,Python在将浮点数转换为整数时似乎更聪明一些。例如,在许多语言中,相当于

x = 1./3.
y = 3.*x
print( int(y))

由于计算1/3时截断,因此产生0。但是Python返回1,这通常是首选结果。但是Python如何确定何时忽略轻微的截断错误,何时不忽略?我发现有一个明显的精确度阈值:

> int(10.999999999999999)
10
> int(10.9999999999999999)
11

第二行只有一个“9”。阈值精度是语言的一个固定的、定义的特性,还是依赖于实现

如果能更好地理解什么时候可以指望Python做“正确的事情”,什么时候不能,那就太好了。如前所述,在较旧的语言中,这是一个需要经常密切关注的问题,因为您知道,即使是最轻微的截断错误也可能给出不同的整数结果,甚至除法和/或乘法的顺序有时也很重要

附加上下文:当我需要计算(从浮点数据)需要访问的数组元素的索引时,我通常使用从浮点到整数的转换


Tags: 记忆答案语言编辑错误阈值整数事情
1条回答
网友
1楼 · 发布于 2024-06-26 05:54:33

在Python3.x中,带/运算符的除法始终返回一个float。这就是为什么1/3没有被截断为0

对于你问题的第二部分,实际上并不是int函数对数进行取整。你不能用那样的精度来表示一个float,所以它在被赋予int函数之前被四舍五入到11

>>> 10.999999999999999
10.999999999999998
>>> 10.9999999999999999
11.0

相关问题 更多 >