由于浮點(diǎn)數(shù)據(jù)類型float,double在計(jì)算中的不確定性,在需要精確計(jì)算的時(shí)候,java提供一個(gè)BigDecimal,使用 BigDecimal 來(lái)定義浮點(diǎn)數(shù)的值,再進(jìn)行浮點(diǎn)數(shù)的運(yùn)算操作。

BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
System.out.println(a.compareTo(b));// 1BigDecimal 保留幾位小數(shù)BigDecimal m = new BigDecimal("1.255433");
BigDecimal n = m.setScale(3,BigDecimal.ROUND_HALF_DOWN);注意點(diǎn):
1、使用string傳參構(gòu)造bigDecimal數(shù)據(jù),使用浮點(diǎn)數(shù)double會(huì)有丟失精度的風(fēng)險(xiǎn)
2、執(zhí)行計(jì)算過(guò)程中必須考慮string為空,null的情況,
3、執(zhí)行計(jì)算過(guò)程中一旦出現(xiàn)divide除法操作,還必須判斷:
除數(shù)不為零(會(huì)報(bào)錯(cuò)除數(shù)不能為0)
是否除盡(不指定,會(huì)報(bào)錯(cuò)Non-terminating decimal expansion)
保留小數(shù)位數(shù)長(zhǎng)度(可能超出數(shù)據(jù)存儲(chǔ)范圍導(dǎo)致報(bào)錯(cuò))
gasConsumeIndex.setQoq((new BigDecimal(gasConsumeIndex.getIndexOfValue())
.subtract(new BigDecimal(gasConsumeIndex.getLastMonthValue()))
.divide(new BigDecimal(gasConsumeIndex.getLastMonthValue()),BigDecimal.ROUND_CEILING))
.multiply(new BigDecimal(100))
.setScale(2,BigDecimal.ROUND_HALF_UP)
.toString()+"%");4、bigDecimail判斷是否為0 務(wù)必使用,使用equale會(huì)因?yàn)榫缺容^失敗
compareTo(BigDecimal.ZERO)你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前文章:java-BigDecimal用法注意事項(xiàng)-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://www.chinadenli.net/article8/dcsoop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、服務(wù)器托管、域名注冊(cè)、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容