<i18n dev> RFR: 8331485: Odd Results when Parsing Scientific Notation with Large Exponent

Justin Lu jlu at openjdk.org
Fri May 3 08:51:23 UTC 2024


Please review this PR which corrects an edge case bug for java.text.DecimalFormat that causes incorrect parsing results for strings with very large exponent values.

When parsing values with large exponents, if the value of the exponent exceeds `Integer.MAX_VALUE`, the parsed value  is equal to 0. If the value of the exponent exceeds `Long.MAX_VALUE`, the parsed value is equal to the mantissa. Both results are confusing and incorrect.

For example,


NumberFormat fmt = NumberFormat.getInstance(Locale.US);
fmt.parse(".1E2147483648"); // returns 0.0
fmt.parse(".1E9223372036854775808"); // returns 0.1
// For comparison
Double.parseDouble(".1E2147483648"); // returns Infinity
Double.parseDouble(".1E9223372036854775808"); // returns Infinity


After this change, both parse calls return `Double.POSITIVE_INFINITY` now.

-------------

Commit messages:
 - init

Changes: https://git.openjdk.org/jdk/pull/19075/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19075&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8331485
  Stats: 165 lines in 2 files changed: 159 ins; 1 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/19075.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19075/head:pull/19075

PR: https://git.openjdk.org/jdk/pull/19075


More information about the i18n-dev mailing list