import java.math.BigDecimal; public class BigDecimalTest { public static void main(String[] args) { //This works as expected - we can parse maxScale with new BigDecimal(String) BigDecimal maxScale = new BigDecimal("1E+2147483647"); System.out.println(maxScale.toString() + ", unscaled value " + maxScale.unscaledValue() + ", scale " + maxScale.scale()); BigDecimal parseMaxScale = new BigDecimal(maxScale.toString()); //This fails - aboveMaxScale is represented as "10" with maximum scale, so //produces an exponent above maximum scale when printed, and this can't be parsed. BigDecimal aboveMaxScale = maxScale.multiply(new BigDecimal(10)); System.out.println(aboveMaxScale.toString() + ", unscaled value " + aboveMaxScale.unscaledValue() + ", scale " + aboveMaxScale.scale()); BigDecimal parseAboveMaxScale = new BigDecimal(aboveMaxScale.toString()); } }