Decimal numbers cannot be precisely represented as a BigDecimal if the BigDecimal(double val) constructor is used. The primitive type double cannot precisely represent all decimal fractions , because its underlying representation is binary. Consequently, the input to the BigDecimal(double val) constructor can lose precision before the constructor is ever invoked.
...