第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么 0.4 和 0.40 與 BigDecimal 不同?

為什么 0.4 和 0.40 與 BigDecimal 不同?

慕斯王 2023-02-23 09:56:53
我讀過 BigDecimal 是用 Java 表示金錢的方法。但我不明白為什么我的一個(gè)單元測試失敗并顯示以下消息:org.opentest4j.AssertionFailedError:    Expected :0.40  Actual   :0.4“實(shí)際”值是 的結(jié)果BigDecimal.valueOf(0.398).setScale(2, RoundingMode.HALF_UP)。所以我想我的問題有兩個(gè)部分:為什么不將這些值視為相等?我怎樣才能以不會(huì)觸發(fā)這種不匹配的方式將 0.40 美元表示為 BigDecimal?
查看完整描述

1 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊

BigDecimals 是數(shù)字和“比例”的組合。2 BD 不認(rèn)為自己相等,除非兩者相等。我建議使用.compareTo(other) == 0)來獲得答案。

NB:我不認(rèn)為使用 BD 是做貨幣的好方法。

通常有兩種處理貨幣的方法。簡單的方法和困難的方法。

簡單的方法是將美分存儲(chǔ)在intor中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 很可能也不好。


查看完整回答
反對(duì) 回復(fù) 2023-02-23
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)