BigDecimal的常用与总结

/**
 * 创建BigDecimal对象的方式 推荐通过String 或者BigDecimal.valueOf() 进行创建对象
 */
double i = 1.123456;

//第一种方式 不推荐 会有精度损失的情况
BigDecimal b1 = new BigDecimal(i);
System.out.println("new BigDecimal(i)=" + b1);

//第二种方式 推荐 通过转换String 创建对象
BigDecimal b2 = new BigDecimal(Double.toString(i));
System.out.println("new BigDecimal(Double.toString(i))=" + b2);

//第三种方式  推荐 内部实现也是通过将数字转换为String 格式后再创建的对象
BigDecimal b3 = BigDecimal.valueOf(i);
System.out.println("BigDecimal.valueOf(i)=" + b3);


/**
 *  BigDecimal对象的 加减乘除 需要记住在每次做运算后的值不会覆盖当前调用对象 而是会重新生成一个新的对象 在相除时建议声明舍入模式
 *
 *  //向正无穷方向舍入
 *  BigDecimal.ROUND_CEILING
 *  //向零方向舍入
 *  BigDecimal.ROUND_DOWN
 *  //向负无穷方向舍入
 *  BigDecimal.ROUND_FLOOR
 *  //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
 *  BigDecimal.ROUND_HALF_DOWN
 *  //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
 *  BigDecimal.ROUND_HALF_EVEN
 *  // 我们常用的四舍五入 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
 *  BigDecimal.ROUND_HALF_UP
 *  //计算结果是精确的,不需要舍入模式
 *  BigDecimal.ROUND_UNNECESSARY
 *  //向远离0的方向舍入
 *  BigDecimal.ROUND_UP 取天花板 如1.32 1.4
 *
 */

//BigDecimal 相加 add
BigDecimal add1 = b3.add(BigDecimal.valueOf(1));
System.out.println("b1.add(BigDecimal.valueOf(1))=" + add1);

//BigDecimal 减 subtract
BigDecimal subtract = add1.subtract(BigDecimal.valueOf(0.01));
System.out.println("add1.subtract(BigDecimal.valueOf(0.01))=" + subtract);

//BigDecimal 乘  multiply  [ˈmʌltəˌplaɪ]
BigDecimal multiply = subtract.multiply(BigDecimal.valueOf(99));
System.out.println("subtract.multiply(BigDecimal.valueOf(99))=" + multiply);

//BigDecimal 除 divide
BigDecimal divide = multiply.divide(BigDecimal.valueOf(3), 5, BigDecimal.ROUND_HALF_UP);
System.out.println("multiply.divide(BigDecimal.valueOf(3))=" + divide);


/**
 * 对BigDecimal 数据 去小位数并四舍五入
 */

BigDecimal bigDecimal = multiply.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bigDecimal);

/**
 * 求余数
 * 返回值为 (this % divisor) 的 BigDecimal
 */
BigDecimal remainder(BigDecimal divisor);

/**
 * 求相反数
 * 返回值是 (-this) 的 BigDecimal
 */
BigDecimal negate();

/**
 * 将此 BigDecimal 与指定的 BigDecimal 比较
 * 根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的;
 * 相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法;
 * 建议使用以下语句执行上述比较:(x.compareTo(y) <op> 0), 其中 <op> 是六个比较运算符之一;
 *
 * 指定者:接口 Comparable<BigDecimal> 中的 compareTo
 * 返回:当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1
 */
int compareTo(BigDecimal val);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值