2016-12-16 14 views
2

我知道這個問題以前已經問過,但解決方案似乎不適用於我。我在python(2.7)兩個非常大的數字,如如下:在python中劃分兩個非常大的數字會返回1

a = 332413405639482828453084501713288536462658058395850 
b = 332413405639482828453084501713288536462658058395856 

,我需要的

a/b 

結果正如你可以看到有兩個這麼之間一個非常小的差異我假設這種劃分的結果不是0或1.我已經嘗試/ /如其他職位建議,但仍然不會返回我正在尋找。有沒有解決這個問題的方法,或者是不可能用python做的事情,或者是一般的大數字?

UPDATE:順便說一句,抱歉,但我忘了提及,即使通過從未來進口部門,我仍然沒有得到我想要的。

感謝

+1

這不是簡單的一個問題整數轉換爲浮點數。不是直接重複。 – svens

回答

9

簡單的彩車都不夠精確,嘗試用Decimal模塊

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


Decimal('0.9999999999999999999999999999999999999999999999999819501864298840350161830097171743383579489213731828') 
>>> 
0

扔浮動第一再做分工,否則U將得到零時,因爲你在Python是第一個整數比第二

2

小2土地(而不是Python 3的)您遇到integer division。嘗試float(a)/float(b)

+0

您不需要鍵入分子和denomenator。類型鑄造其中的任何一個將會訣竅 –

+0

這不是唯一的問題。在Python 3中試試。 – L3viathan

1

我相信這是不可能實現你想要的。具有這個大數字的精度無法完成,因此在這種情況下結果將顯示爲1

我們可以看到(根據docs)存儲在使用decimal.Decimal浮點精確值:

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') 
+0

那麼不管怎樣,我總是會得到1作爲答案? – ahajib

+1

不,請查看我對您主要問題的評論。使用'decimal'模塊。 – svens

+1

@svens很好的回答,我錯過了'prec'屬性。 – Fejs

相關問題