注意:构造BigDecimal时,其初始值参数必须是字符串,否则参与计算时就会不精确。 例:
BigDecimal b1=new BigDecimal(5.00); BigDecimal b2=new BigDecimal(6.51);
System.out.println(b1.multiply(b2));
输出的是:32.5499999999999989341858963598497211933135986328125
BigDecimal b1=new BigDecimal(“5.00”); BigDecimal b2=new BigDecimal(“6.51”);
System.out.println(b1.multiply(b2));
就不会有问题。
这两个类存在原因:
(1)保存无限大的数,不会出现内存益处。只会出现磁盘装不下 (2)BigDecimal用于精确的浮点数计算,不会出现近似值的情况。
技巧:
(1)构造方式
double v1=12D; int v3=21;
BigDecimal b1 = new BigDecimal(v1+"");//构造 BigInteger b3 = new BigInteger(v3+"");
(2)加减乘除
b1 = b1.add(b2) b1 =b1.subtract(b2) b1 =b1.multiply(b2)
//被除数,小数保留位数,按什么方式进行四舍五入。
b1 =b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP)//这儿用的4舍5入
说明:
BigDecimal.ROUND_HALF_UP如果舍弃部分 >= 0.5,则舍入 BigDecimal.ROUND_HALF_DOWN舍弃部分 > 0.5,则舍入行
dicemalNum.setScale(2, BigDecimal.ROUND_HALF_UP);
(3)将其转换为各种类型
b1.doubleValue(); b1.floatValue(); b1.intValue(); b1.toString();
(1)百分数
public static void main(String[] args){
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMaximumIntegerDigits(3); // 设置数的整数部分所允许的最大位数 nf.setMaximumFractionDigits(2);// 设置数的小数部分所允许的最大位数 double d = 0.2;
System.out.println(nf.format(d)); }