基于BigDecimal.setScale的用法小结

基于BigDecimal.setScale的用法小结

这篇文章主要介绍了基于大小数。setScale的用法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1.BigDecimal num 1=new BigDecimal(2.225667);//这种写法不允许,会造成精度损失

2.BigDecimal num 2=new BigDecimal(2);//这种写法是可以的

3.BigDecimal num=new BigDecimal( 2.225667 );//一般都会这样写最好

count计数=数字。scale();

系统。出去。println(计数);//6 返回的是小数点后位数

好了,下面开始正式介绍知识点啦~~~~~~

1. ROUND_DOWN

BigDecimal b=new BigDecimal( 2.225667 ).setScale(2,BigDecimal .四舍五入);

系统。出去。println(b);//2.22 直接去掉多余的位数

2. ROUND_UP

BigDecimal c=new BigDecimal( 2.224667 ).setScale(2,BigDecimal .ROUND _ UP);

系统。出去。println(c);//2.23 跟上面相反,进位处理

3. ROUND_CEILING

天花板(向上),正数进位向上,负数舍位向上

BigDecimal f=new BigDecimal( 2.224667 ).setScale(2,BigDecimal .圆形_天花板);

系统。出去。println(f);//2.23 如果是正数,相当于BigDecimal .围捕

BigDecimal g=new BigDecimal(-2.225667 ).setScale(2,BigDecimal .圆形_天花板);

系统。出去。println(g);//-2.22 如果是负数,相当于BigDecimal .向下舍入

4. ROUND_FLOOR

地板(向下),正数舍位向下,负数进位向下

BigDecimal h=new BigDecimal( 2.225667 ).setScale(2,BigDecimal .ROUND _ FLOOR);

系统。出去。println(h);//2.22 如果是正数,相当于BigDecimal .向下舍入

BigDecimal I=new BigDecimal(-2.224667 ).setScale(2,BigDecimal .ROUND _ FLOOR);

系统。出去。println(一);//-2.23 如果是负数,相当于BigDecimal .四舍五入

5. ROUND_HALF_UP

BigDecimal d=new BigDecimal( 2.225 ).setScale(2,BigDecimal .ROUND _ HALF _ UP);

系统。出去。println( ROUND _ HALF _ UP d);//2.23 四舍五入(若舍弃部分=.5,就进位)

6. ROUND_HALF_DOWN

BigDecimal e=new BigDecimal( 2.225 ).setScale(2,BigDecimal .ROUND _ HALF _ DOWN);

系统。出去。println( ROUND _ HALF _ DOWN e);//2.22 四舍五入(若舍弃部分.5,就进位)

7. ROUND_HALF_EVEN

BigDecimal j=new BigDecimal( 2.225 ).setScale(2,BigDecimal .圆形一半偶数);

系统。出去。println(j);//2.22 如果舍弃部分左边的数字为偶数,则作向下舍入

BigDecimal k=new BigDecimal( 2.215 ).setScale(2,BigDecimal .圆形一半偶数);

系统。出去。println(k);//2.22 如果舍弃部分左边的数字为奇数,则作四舍五入

系统。出去。println( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * );

系统。出去。println( 4.05: new BigDecimal( 4.05 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//4.05:向下4.0

系统。出去。println( 4.15: new BigDecimal( 4.15 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//4.15: 4.2以上

系统。出去。println( 4.25: new BigDecimal( 4.25 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//4.25:向下4.2

系统。出去。println( 4.35: new BigDecimal( 4.35 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//4.35: 4.4以上

系统。出去。println( 4.45: new BigDecimal( 4.45 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//4.45:向下4.4

系统。出去。println( 4.55: new BigDecimal( 4.55 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//4.55: 4.6以上

系统。出去。println( 4.65: new BigDecimal( 4.65 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//4.65:向下4.6

系统。出去。println( 3.05: new BigDecimal( 3.05 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//3.05:向下3.0

系统。出去。println( 3.15: new BigDecimal( 3.15 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//3.15: 3.2以上

系统。出去。println( 3.25: new BigDecimal( 3.25 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//3.25:向下3.2

系统。出去。println( 3.35: new BigDecimal( 3.35 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//3.35: 3.4以上

系统。出去。println( 3.45: new BigDecimal( 3.45 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//3.45:向下3.4

系统。出去。println( 3.55: new BigDecimal( 3.55 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//3.55: 3.6以上

系统。出去。println( 3.65: new BigDecimal( 3.65 ).setScale(1,BigDecimal .ROUND _ HALF _ EVEN));//3.65:向下3.6

8.ROUND_UNNECESSARY

BigDecimal l=new BigDecimal( 2.215 ).setScale(3,BigDecimal .ROUND _不必要);

系统。出去。println(l);

//断言请求的操作具有精确的结果,因此不需要舍入。

//如果对获得精确结果的操作指定此舍入模式,则抛出算术异常。

补充知识:

BigDecimal中divide方法注意问题

BigDecimal中划分方法抛异常:

非终止十进制扩展;没有精确可表示的小数结果

在使用

BigDecimal rate=new BigDecimal(1).divide(new BigDecimal(3));

时抛异常:

非终止十进制扩展;没有精确可表示的小数结果

原来是在做除法的时候出现了无限不循环小数如:0.333333333333

解决方案

在做做除法的时候指定保留的小数的位数:

BigDecimal rate=new BigDecimal(1).divide(new BigDecimal(3),6,BigDecimal .ROUND _ HALF _ UP);

以上这篇基于大小数。setScale的用法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

基于BigDecimal.setScale的用法小结