我正在尝试在python 2.7中编写一个程序,它首先会看到一个数字是否均匀地划分另一个,如果它确实得到了除法的结果。
然而,当我使用大数字时,我得到了一些有趣的结果。
目前我正在使用:
from __future__ import division
import math
a=82348972389472433334783
b=2
if a/b==math.trunc(a/b):
answer=a/b
print 'True' #to quickly see if the if loop was invoked
当我跑步时,我得到:
True
但82348972389472433334783显然不是。
任何帮助都将不胜感激。
答案 0 :(得分:5)
这是一种疯狂的方式。只需使用余数运算符。
if a % b == 0:
# then b divides a evenly
quotient = a // b
答案 1 :(得分:1)
真正的除法隐式地将输入转换为浮点数,这些浮点数不能精确地准确存储a
的值。例如。在我的机器上
>>> int(1E15+1)
1000000000000001
>>> int(1E16+1)
10000000000000000
因此你的精确度会下降。你的大号也会发生类似的事情(比较int(float(a))-a
)
现在,如果你检查你的部门,你会看到结果"是"实际上发现是一个整数
>>> (a/b).is_integer()
True
事先并未真正预料到。
math.trunc函数执行类似的操作(来自docs): 将实际值x截断返回到Integral(通常是一个长整数)。
python的duck typing性质允许比较long整数和float,参见 Checking if float is equivalent to an integer value in python和 Comparing a float and an int in Python
答案 2 :(得分:0)
为什么不使用模数运算符来检查数字是否可以均匀分配?
n%x == 0