BigDecimal 类的用法
如果进行科学计算、财务计算时,使用 double可能不准确,可以使用 BigDecimal类。
它可以调用 add(),subtract(),multiply(),divide() 进行加减乘除操作。
(1)可以按照四舍五入的规则对于小数点后指定位置的数据进行舍入;
(2)具备了任意精度的小数保留。
import java.math.BigDecimal; import java.math.RoundingMode; public class bigDecimalTest { public static void main(String[] args) { BigDecimal bd1 = new BigDecimal(0.511234); BigDecimal bd2 = new BigDecimal(0.621234); //加法:BigDecimal add(BigDecimal augend) BigDecimal add01 = bd1.add(bd2); //设定前 System.out.println(add01); //1.13246799999999991914734209785819984972476959228515625 //设定 setScale(小数位数,舍入策略) BigDecimal bd3 = add01.setScale(2,RoundingMode.HALF_UP);// 保留两位小数,向上取舍 System.out.println(bd3); //1.13 //减法:BigDecimal subtract(BigDecimal subtrahend) BigDecimal subtract01 = bd1.subtract(bd2); BigDecimal bd4 = subtract01.setScale(3,RoundingMode.HALF_UP); System.out.println(bd4); //-0.110 //乘法:BigDecimal multiply(BigDecimal multiplicand) BigDecimal multiply01 = bd1.multiply(bd2); BigDecimal bd5 = multiply01.setScale(3,RoundingMode.HALF_UP); System.out.println(bd5); //0.318 //除法:BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) BigDecimal divide01 = bd1.divide(bd2,2,RoundingMode.HALF_UP); System.out.println(divide01); //0.82 } }
注意:'加减乘' 是计算完结果以后再指定保留位数和舍入策略,'除' 可以当即设定保留位数和舍入策略。
枚举常量摘要(舍入策略)
CEILING 向正无限大方向舍入的舍入模式。
DOWN 向零方向舍入的舍入模式。
FLOOR 向负无限大方向舍入的舍入模式。
HALF_DOWN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。
HALF_EVEN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
HALF_UP 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
UNNECESSARY 用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
UP 远离零方向舍入的舍入模式。