我的Java程序以高精度计算为中心,高精度计算至少需要精确到120个小数位。
因此,程序中所有非整数都将由BigDecimals表示。
显然,我需要为BigDecimals指定舍入的精度,以避免无限的十进制表达式等。
目前,我发现在BigDecimal的每个实例化或数学运算中都必须指定准确性非常麻烦。
是否可以为所有BigDecimal计算设置“全局精度”?
(例如python中的Decimal模块的Context.prec()
)
谢谢
眼镜:
Java JRE7 SE
Windows 7(32)
最佳答案
(几乎)原始
不是那么简单,但是您可以创建一个 MathContext
并将其传递给所有BigDecimal
构造函数和执行操作的方法。
修改后的
另外,您可以扩展BigDecimal
并通过提供正确的MathContext
并使用divide
的舍入版本来覆盖要使用的任何操作:
public class MyBigDecimal extends BigDecimal {
private static MathContext context = new MathContext(120, RoundingMode.HALF_UP);
public MyBigDecimal(String s) {
super(s, context);
}
public MyBigDecimal(BigDecimal bd) {
this(bd.toString()); // (Calls other constructor)
}
...
public MyBigDecimal divide( BigDecimal divisor ){
return new MyBigDecimal( super.divide( divisor, context ) );
}
public MyBigDecimal add( BigDecimal augend ){
return new MyBigDecimal( super.add( augend ) );
}
...
}