Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Literal decimal floating-point numbers cannot always be represented precisely using the double primitive type because the underlying representation of double is binary. This imprecision becomes apparent when a BigDecimal is constructed from a double. precisely represented as an IEEE 754 floating point value. Consequently, the BigDecimal(double val) constructor must not be invoked with passed a floating-point literalsliteral as an argument when doing so results in an unacceptable loss of precision.

Noncompliant Code Example

...

This compliant solution passes the decimal literal as a String so that the BigDecimal(String val) constructor is invoked , and the precision is preserved.

Code Block
bgColor#ccccff
// prints 0.1
System.out.println(new BigDecimal("0.1"));

...