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

Axel Hauschulte duke at openjdk.org
Tue May 7 18:25:56 UTC 2024


On Tue, 7 May 2024 07:46:22 GMT, Justin Lu <jlu at openjdk.org> wrote:

>> 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 one additional commit since the last revision:
> 
>   correct behavior when underflow from adjustment + use MIN

Implementation looks good to me now.

Thanks again for taking care of this.

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

Marked as reviewed by ahauschulte at github.com (no known OpenJDK username).

PR Review: https://git.openjdk.org/jdk/pull/19075#pullrequestreview-2043881285


More information about the i18n-dev mailing list