我正在编写一个程序来检查和打印一个数字是整数还是浮点数,它通常效果很好。 但是当我尝试一些值,如 2.0000000000000001 时,我得到的消息是一个整数,为什么?
法典:
import math
number = float(input("Enter a number: "))
if number == round(number):
print("Integer number")
else:
print("Float number")
在浮点数中,存储位的一部分用于指定数字,其余位用于确定功率。我的猜测是,创建数字20000000000000001所需的位数高于可用量。
你不是在检查它是float
,还是integer
,你是在检查number
是否等于round(number)
,并且由于浮点数存储的不精确性,对于如此小的差异,它们将是相等的。 如果要检查它是integer
还是float
,请尝试以下操作:
number = float(input("Enter a number: "))
if type(number) == int:
print("Integer number")
elif type(number) == float:
print("Float number")
当然,这将始终打印"浮点数",因为number
是一个float
,无论您的输入是2
还是2.5
都无关紧要(2
将被存储为2.0
(。
如果你打印出浮点数"2.0000000000000001",你会看到你会得到2.0。这是因为在 Python 中,您无法真正实现浮动精度,如 https://docs.python.org/3/tutorial/floatingpoint.html 中所述
因此,在您的条件语句中,舍入 2.0 将得到 2,等于 2.0。
它仍然是一个浮点数,因为如果你做 type(number(,你会看到它属于一类浮点数。