Use BigDecimal instead of float (it does not have rounding errors)