BigDecimal保留两位⼩数及格式化成百分⽐
BigDecimal保留两位⼩数及格式化成百分⽐
在项⽬中经常会⽤到⼩数的⼀些计算,⽽float和double类型的主要设计⽬标是为了科学计算和⼯程计算。他们执⾏⼆进制浮点运算,这是为了在⼴域数值范围上提供较为精确的快速近似计算⽽精⼼设计的。然⽽,它们没有提供完全精确的结果,所以不应该被⽤于要求精确结果的场合。但是,商业计算往往要求结果精确。所以有时候必须要采⽤BigDecimal。
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);//保留两位⼩数
System.out.println("结果是"+b);
//下⾯将结果转化成百分⽐
NumberFormat percent = PercentInstance();
percent.setMaximumFractionDigits(2);
System.out.println(percent.format(b.doubleValue()));
}
}
运⾏结果是:
BigDecimal.setScale()⽅法⽤于格式化⼩数点
setScale(1)表⽰保留⼀位⼩数,默认⽤四舍五⼊⽅式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的⼩数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,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)接近负⽆穷⼤的舍⼊,数字>0和ROUND_UP作⽤⼀样,数字<0和ROUND_DOWN作⽤⼀样
setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍⼊,如果与两个相邻数字的距离相等,则向相邻的偶数舍⼊。
注释:
1:scale指的是你⼩数点后的位数。⽐如123.456则score就是3.
bigdecimal除法保留小数score()就是BigDecimal类中的⽅法啊。
⽐如:BigDecimal b = new BigDecimal("123.456");
b.scale(),返回的就是3.
2:roundingMode是⼩数的保留模式。它们都是BigDecimal中的常量字段,有很多种。
⽐如:BigDecimal.ROUND_HALF_UP表⽰的就是4舍5⼊。
3:pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
的意思是说:我⽤⼀个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个⼩数位,roundingMode表⽰的就是保留模式是什么,是四舍五⼊啊还是其它的,你可以⾃⼰选!
4:对于⼀般add、subtract、multiply⽅法的⼩数位格式化如下:
BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);
----结果:----- mData=9.66
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论