我的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 ) );
      }
      ...
}

09-06 11:59