On Tue, 11 Jun 2024 17:25:29 GMT, Justin Lu <j...@openjdk.org> wrote:
> Please review this PR and [CSR](https://bugs.openjdk.org/browse/JDK-8333920) > which corrects a bug where NumberFormat cannot successfully parse values in > integer only mode, when the format expects a suffix. > > For example, > > // a format that expects a currency suffix > var fmt = NumberFormat.getCurrencyInstance(Locale.FRANCE); > fmt.setParseIntegerOnly(true); > failFmt.parse("5,00 €"); // throws ParseException when you would have > expected 5 returned > > > When parsing in integer only mode, instead of breaking upon a decimal symbol > encounter, we should store the index but continue to fully parse so that we > can verify the entire string and increment our position to search for and > match the suffix. Upon a successful suffix match, we can then set > `ParsePosition.index` back to the stored decimal index. > > It should be noted that CompactNumberFormat did previously have code that > would traverse the rest of the String, to allow matching of the suffix. The > difference is that NumberFormat returns the index upon decimal symbol > encounter, while CompactNumberFormat was implemented to return the index > reflected by the entire string traversal. Such differences cannot be > standardized due to behavioral compatibility concerns. > > Thus while parsing in integer only, CNF sets index to the > `Position.fullPos()`, while DF sets index to the `Position.intPos()`. This pull request has now been integrated. Changeset: bffc8484 Author: Justin Lu <j...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/bffc8484c32ad6c3205f7cebe4e262a2dc9de57e Stats: 204 lines in 5 files changed: 102 ins; 34 del; 68 mod 8333755: NumberFormat integer only parsing breaks when format has suffix Reviewed-by: naoto ------------- PR: https://git.openjdk.org/jdk/pull/19664