BigDecimal

Double加减乘除不能用,改用BigDecimal

BigDecimal的初始化,必须是字符串形式,非字符串别用

BigDecimal b = new BigDecimal("1.0011"); //可 
BigDecimal a = new BigDecimal(1.0011); //不行 实际是1.00110.....很长一串

加减乘除,注意除需要设置保留位数

BigDecimal add = a.add(b);  
BigDecimal subtract = a.subtract(b);  
BigDecimal multiply = a.multiply(b);  
BigDecimal divide = a.divide(b,MathContext.DECIMAL32);

强行使用Double初始化


BigDecimal doubleB = BigDecimal.valueOf(2.222D);

较长的保留几位小数,可自定规则

BigDecimal doubleB = BigDecimal.valueOf(2.22823479873823838382D);  
BigDecimal bd = doubleB.setScale(3, RoundingMode.HALF_DOWN);

↓ 不安全不用!!!!!!!!
BigDecimal doubleB = BigDecimal.valueOf(2.22823479873823838382D);  
DecimalFormat format = new DecimalFormat("#.####");  
format.setRoundingMode(RoundingMode.HALF_DOWN);  
String r = format.format(doubleB);

两个BigDecimal比较不能用equals和==,不能避免1.0和1是否相等的问题

new BigDecimal("12.0011").compareTo(new BigDecimal("12.00110"))
发表评论 0

Your email address will not be published. Required fields are marked *