这篇文章主要介绍了基于大小数。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的用法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。