If you check the API documentation for BigDecimal's constructors, you will see the difference between creating an instance using a double (whose precision has
already been compromised by forcing it into IEEE 754 standards) and creating an instance using a
String (which can be translated accurately). This is illustrated with the code below.
BigDecimal instances are objects -- not simple values. So you need to perform calculations using method calls -- not simple operators. That's just the price of precision over IEEE 754 standards.