这篇文章主要介绍了基于大小数。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的用法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。