commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sebb (JIRA)" <>
Subject [jira] [Commented] (CLI-226) createNumber() in TypeHandler cannot work with some Locale
Date Sun, 01 Jul 2012 11:29:18 GMT


Sebb commented on CLI-226:

The Javadoc says:

 * Create a number from a String. If a . is present, it creates a
 * Double, otherwise a Long.
 * @param str the value
 * @return the number represented by <code>str</code>, if <code>str</code>
 * is not a number, null is returned.

This specifically requires '.' as the decimal point separator, so fixing this will change
the contract for Locales that don't use '.'. Not necessarily a blocker, but must be made clear
in the release notes.

On the other hand, the Javadoc says null is returned if the input is not a number; that's
not correct - the code never returns null, it throws ParseException.

As to the test failure, even without the fix AFAICT the test will fail if '.' is not the decimal
separator. The fix is to ensure that the test is run in a Locale with the expected separators.

If the change is made, we'd need to add further tests using other Locales, and ideally one
that works regardless of Locale.
> createNumber() in TypeHandler cannot work with some Locale
> ----------------------------------------------------------
>                 Key: CLI-226
>                 URL:
>             Project: Commons CLI
>          Issue Type: Bug
>    Affects Versions: 1.2
>            Reporter: Olivier Sechet
>              Labels: i18n
> The {{createNumber()}} method in the {{TypeHandler}} class expects the decimal separator
to be a dot ({{'.'}}). However the dot is not used in all the languages as a decimal separator.
Most of the European countries, Russia and a lot of others countries uses a comma ({{','}}).
> With the corresponding {{Locale}}, the {{createNumber()}} method fails, throwing an exception.
> For example:
> {|borderStyle=solid}
> public class Type {
>     public static void main(final String[] args) {
>         java.util.Locale.setDefault(java.util.Locale.GERMANY);
>         String text = java.text.NumberFormat.getNumberInstance().format(12.34);
>         Number nb = org.apache.commons.cli.TypeHandler.createNumber(text);
>         System.out.println(nb);
>     }
> }
> {code}

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


View raw message