> 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