自從我寫了處理金錢的應用程序已經有一段時間了。多年前,我會在幕後製作一個處理整數的金錢對象。每當金額打印在某個地方,它就會將小數點放在正確的位置。這是爲了防止小數點問題。對於java應用程序,在處理金錢時使用BigDecimal是否安全,還是應該使用整數併爲金錢創建抽象?
我還需要這樣做,還是我可以使用BigDecimal?現在認爲最佳做法是什麼?
自從我寫了處理金錢的應用程序已經有一段時間了。多年前,我會在幕後製作一個處理整數的金錢對象。每當金額打印在某個地方,它就會將小數點放在正確的位置。這是爲了防止小數點問題。對於java應用程序,在處理金錢時使用BigDecimal是否安全,還是應該使用整數併爲金錢創建抽象?
我還需要這樣做,還是我可以使用BigDecimal?現在認爲最佳做法是什麼?
這取決於您的要求。您可能只需要解析到最近的K(例如,工作發佈網站上的工資要求)。
假設您的意思是您需要粒度,BigDecimal似乎完全適合這項工作。它似乎肯定是「安全」使用,但不知道你打算如何處理它,很難說一定。
那麼,使用普通雙數據庫即使添加也會有簡單的數學問題是常識。這是不可接受的。我很好奇你是否碰到過BigDecimal的相同問題。使用int不是什麼大問題 - 我可以。我不在乎那麼多。但是,如果我可以通過使用BigDecimal來簡化我的代碼,我真的會喜歡它。節省時間。 – egervari 2011-04-24 04:57:55
提供BigDecimal是爲了避免「這些問題」的唯一目的所以就像我說的,在一般情況下是的,我會說沒關係。但是您可能正在做一些BigDecimal尚未準備好處理的事情。 BigDecimal適用於我能想到的每一筆金錢申請。 – corsiKa 2011-04-24 04:59:55
附註,但我一直很好奇這件事(從來沒有真正處理它):是「雙」*實際上是不安全的*爲錢?我不能相信在分水平會出現舍入誤差......任何人都會介意分享一個「雙」會危險的計算例子嗎? – Mehrdad 2011-04-24 04:47:50
@Mehrdad考慮一種情況,即您的小數點不能用浮點完全表示。如果這個小數表示爲小於期望值的最大值,則比較(例如'balance <= spendCost')將失敗,當它應該成功時。 – corsiKa 2011-04-24 04:51:02
http://stackoverflow.com/questions/316727/is-a-double-really-unsuitable-for-money – sjr 2011-04-24 04:51:21