Use BigDecimal instead of Float for better precision