2014-01-20 51 views
0

如何檢查兩個金額相乘的結果是否等於某個總金額或幾美分。例如:5.57 * 2.92 = 16.2644和3.25 * 5 = 16.25。 我每次增加第一筆金額爲0.01的金額以嘗試找到最接近總金額的金額,第二筆金額不變。檢查兩個金額的總和是否等於某個總差額

+2

似乎很簡單 - 我們可以看到你的代碼? – jedwards

+0

所以你想計算涉及的總股份? –

+0

@AamirAdnan我在計算潛在利潤,如果馬上的價格在你支持它之後下跌,基於蜱,所以說你回到5.0,馬下降到4.8,我想顯示你可以爲它鋪平了多少把你的債務轉化爲利潤 –

回答

3

如果您使用Python(或任何編程語言)進行財務類型計算,您可以使用而不是希望使用浮點數(http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems)。

相反,一定要至少使用decimal模塊,它會給你任意精度的十進制數(http://docs.python.org/2/library/decimal.html)。

至於你的實際問題:

from decimal import Decimal 

r1 = Decimal("5.57") * Decimal("2.92") 
r2 = Decimal("3.25") * Decimal("5") 
epsilon = Decimal("0.01") 

if abs(r1 - r2) <= epsilon: 
    print "Almost equal!" 
+0

它至少部分是這樣做的:0.01不能用二進制表示,這意味着如果OP使用浮動,OP的計算會很早就開始累積錯誤。 –

+0

好點。編輯! –

+0

謝謝,那對我有幫助。 –

2

小數還是不錯的。

,但對一個公差範圍內兩個浮體比較:

tolerance = 0.04 
if abs(number1 - number2) < tolerance: 
    print('the numbers are close') 
+0

謝謝,是否有任何優勢使用浮動,而不是小數由馬克斯諾埃爾建議? –

+0

這是寫得最快,最容易的一點,但由於準確性問題,這裏的一般建議是「十進制」。 – jayelm