java中⽤于计算⾦钱的类BigDecimal
BigDecimal bigDecimalA = new BigDecimal("1234567890123456789012345678901");
BigDecimal bigDecimalB = new BigDecimal("1234567890123456789012345678902");
当double必须⽤作BigDecimal的源时,请使⽤String(double)转成String,然后使⽤String构造⽅法,或使⽤BigDecimal的静态⽅法valueOf.否则达不到精确效果
bigdecimal除法保留小数简单运算:
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的加减乘除计算
BigDecimal⽐较⼤⼩ :可以通过BigDecimal的compareTo⽅法来进⾏⽐较。
返回的结果是int类型,-1表⽰⼩于,0是等于,1是⼤于。
*除去BigDecimal 后⾯.00⽅法 BigDecimal .stripTrailingZeros().toPlainString(); 100.00 变成 100
仅对.00有效 .23⽆效
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论