1 回答

TA貢獻1829條經驗 獲得超9個贊
BigDecimals 是數字和“比例”的組合。2 BD 不認為自己相等,除非兩者相等。我建議使用.compareTo(other) == 0)
來獲得答案。
NB:我不認為使用 BD 是做貨幣的好方法。
通常有兩種處理貨幣的方法。簡單的方法和困難的方法。
簡單的方法是將美分存儲在int
or中long
。因此,將 $0.40 簡單地存儲為40
,而 $12.50 之類的東西將存儲為1250
。你現在有 2 個問題:你不能代表半美分,并且可能會發生溢出(你不能代表高于 2^31-1 美分的金額,但那是......很多美分。讓它成為long
我們遠遠超過整個世界的 GDP)。
但是,半美分通常是一個問題。拿這個問題來說:
我有 4 美分。我想把這些分給 3 個人。
那么我們該怎么辦?BigDecimal 在這里幫不了你;你不能用 BD 完美地表示 4 除以 3。你必須在某個地方四舍五入(它是 1.33333333 ...... BD 不能代表無限序列)。即使它可以或者您決定以某個驚人的數量(比如說 200 位)四舍五入,現在又如何呢?你不能告訴你的銀行轉賬三分之一美分。沒有簡單的答案:如果這是您的應用程序需要做的,那么您需要決定如何處理它。例如,“剩余的一分錢用于房屋”或“軟件隨機選擇一個收件人;他們得到 2 美分,另外 2 個得到 1 美分)。
換句話說,如果“只使用一個 int/long”不這樣做,那么 BigDecimal 很可能也不好。
添加回答
舉報