1 回答

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