我知道之前已经问过这个问题,但解决方案对我来说似乎没有用。我在python(2.7)中有两个非常大的数字,如下所示:
a = 332413405639482828453084501713288536462658058395850
b = 332413405639482828453084501713288536462658058395856
我需要
的结果a/b
正如你可以看到两者之间存在非常微小的差异,所以我假设这个除法的结果不是0或1.我试过//如其他帖子中的建议但是仍然没有返回我的意思寻找。有没有解决方案,或者在python或一般的大数字中无法做到这一点?
更新:顺便说一句,对不起,但我忘了提到即使从未来进口部门,我仍然没有得到我想要的东西。
由于
答案 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)
首先将它们放入浮点然后进行除法,否则当第一个整数小于第二个时,你将得到零