BigDecimal使用时的参数详解
下面我們來看看BigDecimal的setScale方法
BigDecimal.setScale()方法用于格式化小數(shù)點(diǎn)
表示保留一位小數(shù),默認(rèn)用四舍五入方式
setScale(1)
直接刪除多余的小數(shù)位,如2.35會(huì)變成2.3?
setScale(1,BigDecimal.ROUND_DOWN)
進(jìn)位處理,2.35變成2.4?
setScale(1,BigDecimal.ROUND_UP)
四舍五入,2.35變成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)
四舍五入,2.35變成2.3,如果是5則向下舍
setScaler(1,BigDecimal.ROUND_HALF_DOWN)
注意點(diǎn)一
scale指的是你小數(shù)點(diǎn)后的位數(shù)。scale()就是BigDecimal類中的方法。如
BigDecimal b = new BigDecimal("123.456");?
b.scale(),返回的就是3
注意點(diǎn)二
roundingMode是小數(shù)的保留模式。它們都是BigDecimal中的常量字段,有很多種,如
BigDecimal.ROUND_HALF_UP表示的就是4舍5入
注意點(diǎn)三
pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)的意思是說:我用一個(gè)BigDecimal對(duì)象除以divisor后的結(jié)果,并且要求這個(gè)結(jié)果保留有scale個(gè)小數(shù)位,roundingMode表示的就是保留模式是什么,是四舍五入啊還是其它的
注意點(diǎn)四
對(duì)于一般add、subtract、multiply方法的小數(shù)位格式化如下
BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);
?
?
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result??
金額的數(shù)據(jù)類型是BigDecimal通過BigDecimal的divide方法進(jìn)行除法時(shí)當(dāng)不整除,出現(xiàn)無限循環(huán)小數(shù)時(shí),就會(huì)拋異常的,異常如下:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)
應(yīng)用場(chǎng)景:一批中供客戶的單價(jià)是1000元/年,如果按月計(jì)算的話1000/12=83.3333333333....
解決之道:就是給divide設(shè)置精確的小數(shù)點(diǎn)divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)
from:?http://www.cnblogs.com/kevin-yuan/archive/2012/11/02/2751669.html
總結(jié)
以上是生活随笔為你收集整理的BigDecimal使用时的参数详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用基于注解的mybatis时,利用反射
- 下一篇: 面试心得与总结—BAT、网易、蘑菇街