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)