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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解決Java舍入雙重問題

如何解決Java舍入雙重問題

慕妹3242003 2019-07-02 17:18:44
如何解決Java舍入雙重問題似乎減法觸發(fā)了某種問題,其結(jié)果是錯誤的。double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;78.75=787.5*10.0/100 ddouble netToCompany = targetPremium.doubleValue() - tempCommission;708.75 = 787.5 - 78.75double dCommission = request.getPremium().doubleValue() - netToCompany;877.8499999999999 = 1586.6 - 708.75由此產(chǎn)生的期望值為877.85。如何確保計算正確?
查看完整描述

3 回答

?
千萬里不及你

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

要控制浮點(diǎn)算法的精度,應(yīng)使用java.math.BigDecimal..朗讀,閱讀對BigDecimal的需求約翰·祖科夫斯基為您提供更多信息。

考慮到您的示例,最后一行將使用BigDecimal如下所示。

import java.math.BigDecimal;BigDecimal premium = BigDecimal.valueOf("1586.6");BigDecimal netToCompany = BigDecimal.valueOf("708.75");
BigDecimal commission = premium.subtract(netToCompany);System.out.println(commission + " = " + premium + " - " + netToCompany);

這將導(dǎo)致以下輸出。

877.85 = 1586.6 - 708.75


查看完整回答
反對 回復(fù) 2019-07-02
?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗 獲得超4個贊

正如前面的答案所述,這是做浮點(diǎn)運(yùn)算的結(jié)果。

正如前面的海報所建議的,當(dāng)您正在進(jìn)行數(shù)值計算時,請使用java.math.BigDecimal.

然而,使用BigDecimal..將雙值轉(zhuǎn)換為BigDecimal,您可以選擇使用新的BigDecimal(double)構(gòu)造函數(shù)或BigDecimal.valueOf(double)靜態(tài)工廠法使用靜態(tài)工廠方法。

雙構(gòu)造函數(shù)轉(zhuǎn)換double轉(zhuǎn)到BigDecimal靜態(tài)工廠有效地將其轉(zhuǎn)換為String,然后將其轉(zhuǎn)換為BigDecimal.

當(dāng)您遇到這些微妙的舍入錯誤時,這一點(diǎn)就變得相關(guān)了。一個數(shù)字可能顯示為.585,但在內(nèi)部它的值是‘0.58499999999999996447286321199499070644378662109375’.如果你用BigDecimal構(gòu)造函數(shù),您將得到不等于0.585的數(shù)字,而靜態(tài)方法將給出一個等于0.585的值。

double value = 0.585;
System.out.println(new BigDecimal(value));
System.out.println(BigDecimal.valueOf(value));

在我的系統(tǒng)上

0.58499999999999996447286321199499070644378662109375
0.585


查看完整回答
反對 回復(fù) 2019-07-02
?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊

另一個例子:

double d = 0;for (int i = 1; i <= 10; i++) {
    d += 0.1;}System.out.println(d);    // prints 0.9999999999999999 not 1.0

使用BigDecimal代替。

編輯:

另外,要指出的是,這不是一個‘Java’四舍五入的問題。其他語言表現(xiàn)出類似的(雖然不一定是一致的)行為。Java至少保證了這方面的一致行為。


查看完整回答
反對 回復(fù) 2019-07-02
  • 3 回答
  • 0 關(guān)注
  • 909 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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