Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8362612

Make use of the Double.toString(double) algorithm in java.text.DecimalFormat

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Unresolved
    • Icon: P4 P4
    • 26
    • core-libs
    • behavioral
    • low
    • See the description below
    • Java API, System or security property
    • SE

      Summary

      DecimalFormat uses a double->string algorithm that was used in releases prior to JDK 21. Meanwhile, Formatter and Double.toString() use a newer algorithm introduced in JDK 21. In very rare cases, this leads to slightly different outcomes between DecimalFormat and Formatter with equivalent format specifications when formatting doubles.

      Problem

      In rare cases, DecimalFormat and Formatter produce slightly different outcomes on some doubles. For example, currently the double 7.3879E20 is output as "738790000000000100000" with DecimalFormat and as "738790000000000000000" with Formatter, given equivalent format specifications. With this change, the outcomes are the same.

      Solution

      By using the same algorithm used by Double.toString() and Formatter, the behavior of DecimalFormat becomes aligned with these and produce comparable outcomes.

      Specification

      There are no visible API changes. This is a behavioral change on those rare doubles that the old double->string algorithm converts slightly differently than the new algorithm.

      To help migrating applications that might be impacted by this change, for a few releases the old algorithm will still be available to DecimalFormat and classes that depend on it.

      The old algorithm can be enabled with the "-Djdk.compat.DecimalFormat=true" option on the launcher command line. Absent this option, the new algorithm is used.

            rgiulietti Raffaello Giulietti
            rgiulietti Raffaello Giulietti
            Naoto Sato
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: