On Mon, 6 May 2024 18:55:25 GMT, Justin Lu <j...@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: > > Check both parse methods
test/jdk/java/text/Format/DecimalFormat/LargeExponentsTest.java line 150: > 148: // Long.MIN_VALUE > 149: Arguments.of("1.23E-9223372036854775808", 0.0) > 150: ); I would suggest adding one more test case to the edge cases: Arguments.of("0.0123E-2147483648", 0.0) This will test the adjustment of the `digits.decimalAt` field for an exponent that is within the range of integer, but due to the mantissa not being in its standardized form an overflow will occure non the less. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/19075#discussion_r1591480295