我有一个大整数,如'max'。为什么最大值除以'27'并不等于完全省略第一个数字'27'。从技术上讲它们应该是平等的,但在python中它们不是。在这个例子中,如何通过将最大值除以“27”得到相同的答案?
max = 27*37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44
no27 = 37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44
div27 = (max/27)
modno27 = no27%40
moddiv27 = div27%40
打印的值为:
no27 = 35882855955274315680000000
div27 = 3.5882855955274316e+25
modno27 = 0
moddiv27 = 8.0
答案 0 :(得分:6)
假设这是Python 3,您使用了真正的除法,它计算float
个结果,但float
(基于C double
)具有Python int
s的表示限制不要(高于〜2**53
,它不能表示每个整数值。)
当您知道该数字可以被整除时,请使用//
来保留int
- ness。如果它不能被完全整除,你可以向下舍入,例如, 5 // 3 == 1
。如果这是不可接受的,您可以使用divmod
一次计算商和余数(因此不会丢失任何信息)或fractions.Fraction
类型或decimal.Decimal
类型(具有适当的精度) )在单个结果类型中获得更精确的结果。