BigDecimal bigDecimalA = new BigDecimal("1234567890123456789012345678901");
BigDecimal bigDecimalB = new BigDecimal("1234567890123456789012345678902");
当double必须用作BigDecimal的源时,请使用Double.toString(double)
转成String,然后
使用String构造方法,或使用BigDecimal的静态方法valueOf.否则达不到精确效果
简单运算:
bigDecimalA = bigDecimalA.add(bigDecimalB); // 加 +
bigDecimalA = bigDecimalA.subtract(bigDecimalB); // 减 -
bigDecimalA = bigDecimalA.multiply(bigDecimalB); // 乘 *
bigDecimalA = bigDecimalA.divide(bigDecimalB, 2, BigDecimal.ROUND_HALF_UP); // 除 /
三个参数依次为 //被除数 , 保留几位小数 , 舍入模式-四舍五入
BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result., 所以一般建议使用传3个参数,上面那种,尽量不要直接除,舍入方式见下图
ROUND_CEILING //如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作 (一句话:取附近较大的整数)
ROUND_FLOOR //如果 BigDecimal 是正的,则做 ROUND_DOWN 操作;如果为负,则做 ROUND_UP 操作(一句话:取附近较小的整数)
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入,
例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,
使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //(四舍五入) 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,
向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向上取整
ROUND_DOWN //向下取整
需要对BigDecimal进行截断和四舍五入可用setScale方法,例:
BigDecimal a = new BigDecimal("4.5635");
a = a.setScale(2, RoundingMode.HALF_UP); //保留2位小数,且四舍五入
System.out.println(a); //4.56
BigDecimal和其他类型计算时.可以直接new BigDecimal(integer...)然后采用BigDecimal的加减乘除计算
BigDecimal比较大小 :可以通过BigDecimal的compareTo方法来进行比较。
返回的结果是int类型,-1表示小于,0是等于,1是大于。
*除去BigDecimal 后面.00方法 BigDecimal .stripTrailingZeros().toPlainString(); 100.00 变成 100
仅对.00有效 .23无效