python - 为什么我应该使用整数而不是 float ?

标签 python python-3.x floating-point int

我正在准备一节课(我在教),我试图预测学生可能提出的任何问题,但我遇到了一个我无法回答的问题:

如果我们有浮点数,我们为什么还要使用整数?重点是什么?

我知道(或至少我认为)浮点数占用更多内存,因为它们具有更高的准确性,但对于大多数非嵌入式应用程序的内存使用量而言,差异肯定几乎可以忽略不计。

我意识到在很多情况下我们实际上不需要浮点数,但老实说,为什么我们首先要有整数?重点是什么?没有什么是 int 可以做的,而浮点数不能。

那么他们为什么会在那里呢?

编辑:您可能会争辩说它们更容易编写(3 对 3.0),但您可以将所有数字默认为浮点数,因此 3 将被视为与 3.0 相同。 为什么要做成不同的类型?

最佳答案

在许多情况下,浮点数是近似值。一些整数(和小数)可以用 float 精确表示。 ,但大多数不能。见 Floating Point Arithmetic: Issues and Limitations .

>>> a = 1000000000000000000000000000
>>> a+1 == a
False
>>> a = 1000000000000000000000000000.0
>>> a+1 == a
True

由于浮点数的这种近似性质,一些计算可能会产生意想不到的结果(这与问题没有直接关系,但它很好地说明了这一点):
>>> sum(1.1 for _ in range(9))
9.899999999999999

例如,当您处理货币计算时,最好使用整数,或者(如果速度不是问题) decimal module .

关于python - 为什么我应该使用整数而不是 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20452189/

相关文章:

python - 如何按数字排序但使用 dtype=object 读取_csv?

python - 自引用列表的使用

python - 如何添加以 : ('name' , 形式给出的元组列表给出的数字(数字)

python - 使用 pytest 进行惰性参数化

json - 在 JSON 中传递美元金额的最佳实践是什么?

python - 了解父属性 setter 的继承

python - lxml.html.tostring 在打印时重新排序了 doctype 和 xml 标签

python - 为什么即使格式匹配,Python 日期时间也会失败 {Date}2016-11-22T11 :49:21. 826-05:00

string - 如何将字符串解析为以逗号作为小数分隔符的 float

ios - CGFloat 在哪个 Apple 硬件/操作系统上是 32 位的,哪个是 64 位的?