这个问题在这里已有答案:
我想检查Python是否一个(大整数)值是10的幂。通常我只是检查值的模10。这适用于高达1.E + 22的值,之后,它返回奇怪的值:
lowInteger = 1.E12
highInteger = 1.E23
print(lowInteger % 10) #as expected returns 0
>>> 0.0
print(highInteger % 10) #returns 2.0 instead of 0.0, 1.E23 returns 3.0, etc
>>> 2.0
浮点数1.E23
不是10的幂。它是你想要的10的幂的最近可表示的数字。它的实际价值是
>>> int(1e23)
99999999999999991611392
如果你想要精确的整数,请使用整数,而不是浮点数。你想要10**23
。
>>> 10**23
100000000000000000000000
此外,如果你想检查数字是否为10的幂,x % 10 == 0
无论如何是错误的检查,因为那是检查数字是否是10的倍数。