python - 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 做“正确的事情”,什么时候不能。如前所述,在旧语言中,这是一个需要持续密切关注的问题,因为您知道即使是最轻微的截断错误也会给您带来不同的整数结果,甚至除法和/或乘法的顺序有时也很重要。
附加上下文:当我需要(从浮点数据)计算需要访问的数组元素的索引时,我通常使用从浮点到整数的转换。
解决方案
/
在 Python3.x 中,使用运算符的除法总是返回一个float
. 这就是为什么1/3
不截断为0
.
对于您问题的第二部分,实际上并不是将数字四舍五入int
的函数。您只是不能以该精度表示 a ,因此它在被赋予功能之前被四舍五入:float
11
int
>>> 10.999999999999999
10.999999999999998
>>> 10.9999999999999999
11.0
推荐阅读
- spring-mvc - 更新列表时如何更新百里香?
- javascript - 如何防止 fs.createReadStream 打开超过 x 个文件?
- raspberry-pi - 有人可以通过树莓派跟踪 vpn
- python - 我已扩展名为 UserProfile 的默认用户表,并希望从产品模型访问信息,但显示完整性错误
- python - 带有日期时间索引的熊猫 to_json 和 read_json
- javascript - React Navigation 6.0 双标头问题
- ios - 如何删除 main.storyboard 的元素
- reactjs - 反应如何替换整个 url 位置而不是路径名堆叠
- android-studio - 在成功构建之前,设计编辑器不可用...此错误显示在我的 android studio activity_main.xml 中
- c# - EFCore 2.2.6 与 5.0.8 无跟踪