BigDecimal使⽤⼩结
⼯作总结
BigDecimal使⽤⼩结
当业务涉及到⼤数的精确计算,⽐如钱或者重量等有⼩数点且要求⼀定精度的数值时,常常会使⽤BigDecimal类型定义该字段,这⾥列举了⼀些BigDecimal的常⽤⽤法
1.获取BigDecimal数值
1. 直接定义变量并赋值
BigDecimal money100 =new BigDecimal(100);
2. 直接获取常量值
//获取BigDecimal类型的0
BigDecimal money0 = BigDecimal.ZERO;
//获取BigDecimal类型的1
BigDecimal money1 = BigDecimal.ONE;
//获取BigDecimal类型的10
BigDecimal money10 = BigDecimal.TEN;
3. 其他类型的数值转BigDecimal
//获取BigDecimal类型的整数
BigDecimal money11 = BigDecimal.valueOf(11);
//获取BigDecimal类型的浮点数
BigDecimal money1_1 = BigDecimal.valueOf(1.1);
2.常⽤BigDecimal函数
//1. 加(add()):100+1
BigDecimal money101 = money100.add(money1);
/
/2. 减(subtract()):100-1
BigDecimal money99 = money100.subtract(money1);
//3. 乘(multiply()):10*1.1
BigDecimal money11 = money10.multiply(money1_1);
//4. 除-整除(divide(BigDecimal divisor)):99/11
//不整除时抛异常java.lang.ArithmeticException
BigDecimal money9 = money99.divide(money11);
//5. 除法-不整除(divide(BigDecimal divisor, int scale, int roundingMode)):101/11
//divisor:除数 scale:保留⼩数位数 roundingMode:舍⼊策略
BigDecimal money9_18 = money101.divide(money11,2,ROUND_CEILING);
//6. 取余数(remainder()):101/11
BigDecimal money2 = ainder(money11);
//7. 取反(negate()):-1
BigDecimal money_1 = ate();
//8. 绝对值(abs()):|-1|
BigDecimal money_1_ = money_1.abs();
//9. 保留⼩数位数(setScale())-四舍五⼊
BigDecimal money1_100 = money1_1.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
/**
* 舍⼊策略
*/
//ROUND_CEILING:向正⽆穷⽅向舍⼊
/
/ROUND_DOWN:向零⽅向舍⼊
//ROUND_FLOOR:向负⽆穷⽅向舍⼊
//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:向远离0的⽅向舍⼊
3.通过validation注解校验BigDecimal⼊参
1.参数实体
@Data
public class BigDecimalValidationTestDTO {
/**
* @Digits ⼩数位校验
* @DecimalMin 最⼩值校验
* @DecimalMax 最⼤值校验
* @NotNull ⾮空校验
* BigDecimal 数字和字符格式都能识别
*
*/
@Digits(integer =3, fraction=2, message ="资⾦格式错误")
@DecimalMin(value ="0.00", message ="资⾦最⼩值不能低于0.00元")
@DecimalMax(value ="10.00", message ="资⾦最⼤值不能⾼于10.00元")
@NotNull(message ="资⾦不可为空")
private BigDecimal money;
}
bigdecimal除法保留小数2.控制层接收器
@RestController
@RequestMapping("/test")
public class BigDecimalValidationTestController{
@PostMapping(value ="/method")
public BigDecimal bigDecimalValidationTestMethod(@RequestBody@Valid BigDecimalValidationTestDTO request){
Money();
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论