BigDecimal 被精确描述。您可以使用MathContext
.
MathContext context = new MathContext(15 + 8, RoundingMode.HALF_UP);
当你申请你的需要
BigDecimal value = new BigDecimal("1234567890123456789.12345678",context);
输出将是
1234567890123456789.1235
这是从数字中删除的东西是最小的东西的预期方式。如果你想为数字设置上限,你需要声明你自己的类型并检查结果是否大于限制,那么你有一个溢出错误。
您可以通过扩展 BigDecimal 类来实现控制它的类型
private class BigNumber extends BigDecimal {
private final int exponent;
private final int mantissa;
private BigDecimal limit;
public BigNumber(String val, int exponent, int mantissa) {
super(val);
this.exponent = exponent;
this.mantissa = mantissa;
char[] limit = new char[exponent];
Arrays.fill(limit, '9');
this.limit = new BigDecimal(limit).add(BigDecimal.ONE);
}
@Override
public BigDecimal add(BigDecimal augend) {
BigDecimal result = super.add(augend);
if(result.compareTo(limit) < 0) {
return result;
}
throw new RuntimeException("Nuber to large");
}
}