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

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

如何在 Java 中處理 BigDecimal 中的路由

如何在 Java 中處理 BigDecimal 中的路由

慕少森 2022-10-07 17:44:32
我有這個(gè)代碼來獲得一個(gè)百分比:final BigDecimal price = BigDecimal.valueOf(215).setScale(2, BigDecimal.ROUND_HALF_EVEN);final BigDecimal daysOfThisReservation = BigDecimal.valueOf(3).setScale(2, BigDecimal.ROUND_HALF_EVEN);final BigDecimal dayPrice = price.divide(daysOfThisReservation, BigDecimal.ROUND_HALF_EVEN).setScale(2, BigDecimal.ROUND_HALF_EVEN);System.out.println(dayPrice); //71.67System.out.println(dayPrice.multiply(daysOfThisReservation).setScale(2, BigDecimal.ROUND_HALF_EVEN)); //215.01我有一個(gè) 215.00 美元的預(yù)訂,這個(gè)預(yù)訂每天有 3 個(gè),所以價(jià)格是 71.67 美元。如果我嘗試再次獲取原始值,我會遇到一些舍入問題,71.67 * 3 = 215.01如何處理此類問題?
查看完整描述

3 回答

?
慕桂英546537

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

我的感覺是,這里的問題不是丟棄原始價(jià)格,而是通過將小數(shù)截?cái)嗟叫?shù)點(diǎn)后兩位來丟棄有價(jià)值的信息。如果你再保留一位小數(shù),你就不會有這個(gè)問題。


這是一個(gè)保留 6 位精度的示例,以允許足夠的精度來對我最終只需要兩位有效小數(shù)位的值進(jìn)行數(shù)百次操作。如果您最后只關(guān)心 2 位,您將永遠(yuǎn)不會遇到 6 位小數(shù)的舍入問題。


此代碼保留 6 個(gè)位置,但打印單日價(jià)格時(shí)除外,此時(shí)它四舍五入到 2 個(gè)位置。


final BigDecimal price = BigDecimal.valueOf(215).setScale(6, BigDecimal.ROUND_HALF_EVEN);

final BigDecimal daysOfThisReservation = BigDecimal.valueOf(3).setScale(6, BigDecimal.ROUND_HALF_EVEN);


final BigDecimal dayPrice = price.divide(daysOfThisReservation, BigDecimal.ROUND_HALF_EVEN).setScale(6, BigDecimal.ROUND_HALF_EVEN);


System.out.println(dayPrice.setScale(2, BigDecimal.ROUND_HALF_EVEN));

System.out.println(dayPrice.multiply(daysOfThisReservation).setScale(2, BigDecimal.ROUND_HALF_EVEN)); //215.01

結(jié)果:


71.67

215.00


查看完整回答
反對 回復(fù) 2022-10-07
?
慕婉清6462132

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

讓我們這樣看。內(nèi)存和通信很便宜。


BigDecimal totalPrice = new BigDecimal(double 215.00);

int numNight = 3;

BigDecimal perNightPrice = totalPrice

    .divide(new BigDecimal(int numNight), BigDecimal.ROUND_HALF_EVEN)

    .setScale(2, BigDecimal.ROUND_HALF_EVEN);

此時(shí),您有三個(gè)變量。鑒于內(nèi)存(主 RAM 和輔助磁盤/DB)和通信都很便宜,您可以只保留 totalPrice 變量。您無需從 perNightPrice 和 numNight 對其進(jìn)行逆向工程。


我以前也遇到過這種情況。我們只是更改 API 和/或數(shù)據(jù)表定義以允許我們保留更多數(shù)據(jù)(除非您在 Lunar-Lander 中報(bào)廢內(nèi)存——我懷疑這種情況,因?yàn)?Lunar-Lander 不計(jì)算酒店價(jià)格) .


查看完整回答
反對 回復(fù) 2022-10-07
?
12345678_0001

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

可以提高到一定的精度嗎?


final BigDecimal price = BigDecimal.valueOf(215).setScale(10, BigDecimal.ROUND_HALF_EVEN);

final BigDecimal daysOfThisReservation = BigDecimal.valueOf(3).setScale(10, BigDecimal.ROUND_HALF_EVEN);



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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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