有个特殊处理需要把BigDecimal的整数部分和小数部分分开计算
public class BdTest {
public static void main(String[] args) {
BdBean bt = new BdBean();
bt.setBdA(4);
System.out.println(bt.getB());
bt.setBdA(0);
System.out.println(bt.getB());
bt.setBdB(4);
System.out.println(bt.getB());
bt.setBdB(0);
System.out.println(bt.getB());
}
}
//
class BdBean {
@Getter
@Setter
private BigDecimal b = new BigDecimal("23.25");
//获取整数部分
public int getBdA() {
return b.intValue();
}
//覆盖整数部分
public void setBdA(int value) {
setB(BigDecimal.valueOf(value).add(getB().divideAndRemainder(BigDecimal.ONE)[1]));
}
//获取小数部分
public int getBdB() {
// return b.movePointRight(2).remainder(BigDecimal.valueOf(Math.pow(10, 2))).intValue();
return b.movePointRight(2).remainder(new BigDecimal("100")).intValue();
}
//覆盖小数部分
public void setBdB(int value) {
if (value == 0) {
setB(getB().setScale(0, RoundingMode.DOWN));
return;
}
int len = (int) Math.log10(value) + 1;
long val = (long) (b.longValue() * Math.pow(10, len) + value);
setB(BigDecimal.valueOf(val, len));
}
}