Set all BigDecimal operations to a certain precision?

bigdecimal, floating-accuracy, java, math, rounding

Solution

(Almost) Original

Not as simple, but you can create a `MathContext` and pass it to all your `BigDecimal` constructors and the methods performing operations.

Revised

Alternatively, you can extend `BigDecimal` and override any operations you want to use by supplying the right `MathContext`, and using the rounding version of `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 ) );
      }
      ...
}

Problem

My Java program is centered around high precision calculations, which need to be accurate to at least 120 decimal places. Consequentially, all non-integer numbers will be represented by BigDecimals in the program. Obviously I need to specify the accuracy of the rounding for the BigDecimals, to avoid infinite decimal expressions etc. Currently, I find it a massive nuisance to have to specify the accuracy at every instantiation or mathematical operation of a BigDecimal. Is there a way to set a 'global accuracy' for all BigDecimal calculations? (Such as the `Context.prec()` for the Decimal module in python) Thanks Specs: Java jre7 SE Windows 7 (32)

Original source