Use BigDecimal for subtraction to resolve precision issues with double