BigDecimal如何保留兩位小數(shù)
前言
在項(xiàng)目中經(jīng)常會(huì)用到小數(shù)的一些計(jì)算,而float和double類型的主要設(shè)計(jì)目標(biāo)是為了科學(xué)計(jì)算和工程計(jì)算。
他們執(zhí)行二進(jìn)制浮點(diǎn)運(yùn)算,這是為了在廣域數(shù)值范圍上提供較為精確的快速近似計(jì)算而精心設(shè)計(jì)的。
然而,它們沒有提供完全精確的結(jié)果,所以不應(yīng)該被用于要求精確結(jié)果的場(chǎng)合。
但是,商業(yè)計(jì)算往往要求結(jié)果精確。所以有時(shí)候必須要采用BigDecimal。
1.代碼實(shí)現(xiàn)
代碼如下(示例):
public class Demo {
public static void main(String[] args) {
BigDecimal a =null;
Integer faultRate = 6;
a = BigDecimal.valueOf(faultRate.doubleValue()/3);
BigDecimal b =a.setScale(2, RoundingMode.HALF_UP);//保留兩位小數(shù)
System.out.println("結(jié)果是"+b);
//下面將結(jié)果轉(zhuǎn)化成百分比
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMaximumFractionDigits(2);
System.out.println(percent.format(b.doubleValue()));
}
}
運(yùn)行結(jié)果:

2.方法詳解
- BigDecimal.setScale()方法用于格式化小數(shù)點(diǎn)
- setScale(1)表示保留一位小數(shù),默認(rèn)用四舍五入方式
- setScale(1,BigDecimal.ROUND_DOWN)直接刪除多余的小數(shù)位,如2.35會(huì)變成2.3
- setScale(1,BigDecimal.ROUND_UP)進(jìn)位處理,2.35變成2.4
- setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35變成2.4
- setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35變成2.3,如果是5則向下舍
- setScaler(1,BigDecimal.ROUND_CEILING)接近正無窮大的舍入
- setScaler(1,BigDecimal.ROUND_FLOOR)接近負(fù)無窮大的舍入,數(shù)字>0和ROUND_UP作用一樣,數(shù)字<0和ROUND_DOWN作用一樣
- setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的數(shù)字舍入,如果與兩個(gè)相鄰數(shù)字的距離相等,則向相鄰的偶數(shù)舍入。
注釋
1:scale指的是你小數(shù)點(diǎn)后的位數(shù)。
- 比如123.456則score就是3.
- score()就是BigDecimal類中的方法啊。
- 比如:BigDecimal b = new BigDecimal(“123.456”);b.scale(),返回的就是3.
2:roundingMode是小數(shù)的保留模式。
- 它們都是BigDecimal中的常量字段,有很多種。
- 比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。
3:pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)的意思是說:
- 我用一個(gè)BigDecimal對(duì)象除以divisor后的結(jié)果,并且要求這個(gè)結(jié)果保留有scale個(gè)小數(shù)位,
- roundingMode表示的就是保留模式是什么,是四舍五入啊還是其它的,你可以自己選!
4:對(duì)于一般add、subtract、multiply方法的小數(shù)位
格式化如下:
BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);
運(yùn)行結(jié)果:
mData=9.66
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
selenium+java+chrome環(huán)境搭建的方法步驟
這篇文章主要介紹了selenium+java+chrome環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
SpringBoot整合MP通過Redis實(shí)現(xiàn)二級(jí)緩存方式
這篇文章主要介紹了SpringBoot整合MP通過Redis實(shí)現(xiàn)二級(jí)緩存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
springboot+rabbitmq實(shí)現(xiàn)指定消費(fèi)者才能消費(fèi)的方法
當(dāng)項(xiàng)目部署到測(cè)試環(huán)境后,QA測(cè)試過程中,總是“莫名其妙”的發(fā)現(xiàn)所保存的用戶付款單數(shù)據(jù)有問題。這篇文章主要介紹了springboot+rabbitmq實(shí)現(xiàn)指定消費(fèi)者才能消費(fèi),需要的朋友可以參考下2021-11-11
詳解Spring Boot對(duì) Apache Pulsar的支持
Spring Boot通過提供spring-pulsar和spring-pulsar-reactive自動(dòng)配置支持Apache Pulsar,類路徑中這些依賴存在時(shí),Spring Boot自動(dòng)配置命令式和反應(yīng)式Pulsar組件,PulsarClient自動(dòng)注冊(cè),默認(rèn)連接本地Pulsar實(shí)例,感興趣的朋友一起看看吧2024-11-11
Maven打包報(bào)錯(cuò)"powershell不是內(nèi)部命令"的解決方法
Maven打包時(shí)遇到"powershell不是內(nèi)部命令"的報(bào)錯(cuò),根源在于路徑中的空格,當(dāng)IDEA安裝在含空格的路徑,下面小編就和大家詳細(xì)介紹一下具體解決方法吧2026-02-02
SpringBoot?Admin集成診斷利器Arthas示例實(shí)現(xiàn)
這篇文章主要為大家介紹了SpringBoot?Admin集成診斷利器Arthas示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Java中String類(字符串操作)的10個(gè)常見問題和解決方法
這篇文章主要介紹了Java中String類(字符串)操作的10個(gè)常見問題,需要的朋友可以參考下2014-04-04

