在python中划分两个非常大的数字会返回1

时间:2016-12-16 23:21:06

标签: python

我知道之前已经问过这个问题,但解决方案对我来说似乎没有用。我在python(2.7)中有两个非常大的数字,如下所示:

a = 332413405639482828453084501713288536462658058395850
b = 332413405639482828453084501713288536462658058395856

我需要

的结果
a/b

正如你可以看到两者之间存在非常微小的差异,所以我假设这个除法的结果不是0或1.我试过//如其他帖子中的建议但是仍然没有返回我的意思寻找。有没有解决方案,或者在python或一般的大数字中无法做到这一点?

更新:顺便说一句,对不起,但我忘了提到即使从未来进口部门,我仍然没有得到我想要的东西。

由于

4 个答案:

答案 0 :(得分:9)

简单的浮点数不够精确,请尝试使用Decimal模块

>>> from decimal import Decimal, localcontext
>>> with localcontext() as cont:
        cont.prec=100
        Decimal(a)/Decimal(b)


Decimal('0.9999999999999999999999999999999999999999999999999819501864298840350161830097171743383579489213731828')
>>> 

答案 1 :(得分:2)

由于您使用的是Python 2(而不是Python 3),因此您遇到了integer division。试试float(a)/float(b)

答案 2 :(得分:1)

我相信不可能实现你想要的。这个大数字的精度无法实现,因此在这种特殊情况下,结果将显示为1

我们可以使用decimal.Decimal(根据docs)查看存储在float中的确切值:

In [1]: a = 332413405639482828453084501713288536462658058395850

In [2]: b = 332413405639482828453084501713288536462658058395856

In [3]: import decimal

In [4]: a1 = decimal.Decimal(a)

In [5]: b1 = decimal.Decimal(b)

In [6]: a1/b1
Out[6]: Decimal('1.000000000000000000000000000')

答案 3 :(得分:0)

首先将它们放入浮点然后进行除法,否则当第一个整数小于第二个时,你将得到零