Using BigDecimal avoiding precision loss