use BigDecimal instead of BigInteger