Convert string to BigDecimal in java

The BigDecimal(double) constructor can have unpredictable behaviors. It is preferable to use BigDecimal(String) or BigDecimal.valueOf(double).

System.out.println(new BigDecimal(135.69)); //135.68999999999999772626324556767940521240234375
System.out.println(new BigDecimal("135.69")); // 135.69
System.out.println(BigDecimal.valueOf(135.69)); // 135.69

The documentation for BigDecimal(double) explains in detail:

  1. The results of this constructor can be somewhat unpredictable. One might assume that writing new BigDecimal(0.1) in Java creates a
    BigDecimal which is exactly equal to 0.1 (an unscaled value of 1, with
    a scale of 1), but it is actually equal to
    0.1000000000000000055511151231257827021181583404541015625. This is because 0.1 cannot be represented exactly as a double (or, for that
    matter, as a binary fraction of any finite length). Thus, the value
    that is being passed in to the constructor is not exactly equal to
    0.1, appearances notwithstanding.
  2. The String constructor, on the other hand, is perfectly predictable: writing new BigDecimal(“0.1”) creates a BigDecimal which
    is exactly equal to 0.1, as one would expect. Therefore, it is
    generally recommended that the String constructor be used in
    preference to this one.
  3. When a double must be used as a source for a BigDecimal, note that this constructor provides an exact conversion; it does not give
    the same result as converting the double to a String using the
    Double.toString(double) method and then using the BigDecimal(String)
    constructor. To get that result, use the static valueOf(double)
    method.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)