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

Justin Lu jlu at openjdk.org
Fri May 17 21:59:38 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.

Justin Lu has updated the pull request incrementally with two additional commits since the last revision:

 - change impl to support whitebox test
 - adjust impl to increase accuracy when decimalAt/exponent value are both around Integer.MAX/MIN

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/19075/files
  - new: https://git.openjdk.org/jdk/pull/19075/files/2c167493..7fe44600

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=19075&range=05
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=19075&range=04-05

  Stats: 90 lines in 2 files changed: 65 ins; 12 del; 13 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