2010-09-30 74 views
1

看看下面的例子:Python - 接受的金錢計算技巧是什麼?

>>> from decimal import Decimal 
>>> nrml_price = Decimal('0.59') 
>>> discounted = nrml_price/3 # Taking 2/3 off the price with a coupon 
Decimal('0.1966666666666666666666666667') # Customers don't have fractions of a penny 
>>> (nrml_price/3).quantize(D('0.00')) # So I quantize to get 2 decimal places 
Decimal('0.20') # Ca fait combien? Cest vingt cents. 

的問題是,我現在已經在技術上不到3/10一分錢收取的客戶超過預期的價格,雖然,但仍然在技術上不正確。

我該如何克服這樣的問題?我是否將其視爲生活中的事實,還是有一種可以接受的方式來做這類事情(例如,始終向客戶收取最近的一分錢)?

+11

觀看超人III或辦公空間得到的,你應該在這裏做什麼好主意...... – 2010-09-30 20:41:41

+7

這其實不是一個編程問題可言,因爲沒有通用的解決方案,編程可以提供。你需要問這個會計師的問題。 – SingleNegationElimination 2010-09-30 20:42:19

+0

@San - 辦公空間 - 我打算參考一下:)雖然我不記得超人3。 – orokusaki 2010-09-30 20:44:18

回答

7

「是有一個接受的方式做這樣的事情」

是。會計師一直在做。

事實上,COBOL確實做得很好。

Python的decimal包有一堆四捨五入您在上下文中設置選項。幾乎總是在您的上下文中使用decimal.ROUND_HALF_DOWN或decimal.ROUND_HALF_EVEN選項。

當建立零售管理這樣的軟件,還會有地方企業的政策,通過真正的會計師,這說明應該怎樣做管理。

向誰與這條線業務的政策是什麼工作的會計師。

+0

@orokusaki:當你進行完全的實驗時,你學到了什麼? – 2010-10-01 01:33:34

+0

我沒有。這就是爲什麼我問你 - 我給你15分,對你的100K目標男人:) – orokusaki 2010-10-01 04:29:34

+0

@orokusaki:請採取暗示。實際上運行實際的實驗。這是4行代碼,你會從運行實驗中學到更多東西,而不是問幾十個類似的問題。如果我運行實驗併發布結果,那麼實際上價值較低。實際上請寫下實際的實驗並實際運行它。這對你有幫助。你會從中得到更多的信息,而不是我能給出的答案。 – 2010-10-01 10:24:20

4

這裏的答案可能實際上取決於您的交易處理器。您的交易處理器是否允許您轉移不是全部美分的貨幣數量?非理性價值貨幣金額呢?假設折扣是正常價格的平方根?

大多數供應商(那你在這裏)只會圍捕並保持差異,在整個美分。

+0

你是羅素K.米? – orokusaki 2010-09-30 22:08:02