国际化的 NumberFormat

NumberFormat for internationalization

我正尝试在 Android 上将我的应用程序国际化。 我知道在欧洲以及世界其他地方,小数和数字的表示方式与 U.S.

不同

我正在尝试使用 NumberFormat 来帮助我更改代表欧洲小数的字符串输入。 所以,例如:

  1. String number1 = "8,765" 格式化后应该变成 "8.77" 数字格式
  2. 用 NumberFormat
  3. 格式化后,字符串 number2 = "1.203" 应该变成 "1,203"
  4. 字符串 number3 = "1.203,5632" 在用 NumberFormat
  5. 格式化后应该变成 "1,203.56"

我的代码几乎可以完美运行,但我遗漏了一些东西: 我不想使用方法String.format我想使用 NumberFormat。

NumberFormat nformat = NumberFormat.getInstance(Locale.US);
nformat.setMaximumFractionDigits(2);
nformat.setMaximumFractionDigits(2);
String user_string = "8,747";

try{
Number my_number = nformat.parse(user_string); 
String result = nformat.format(my_number);
System.out.println("look at result: " + result); //this prints:  8,747.00  NOT  8.75
 }catch(Exception exception){

}

如何让 NumberFormat 打印 8.75 而不是 8,747.00 。此外,我可以在 user_string 上使用替换或 replaceAll 调用,但我不想使用额外的计算。 NumberFormat 如何处理这个问题?

谢谢

在回答你的问题之前,我想告诉你不要吞下异常。一个空的 catch 块是一个糟糕的禁忌。编辑:当异常发生时,您将不知道程序中出了什么问题。这就像蒙着眼睛编码。底部链接的简短文章更详细地解释了这种做法如何破坏例外的目的。

要从一种字符串格式转换为另一种字符串格式,您需要两个格式化程序,一个用于解析,一个用于格式化。

NumberFormat europeanInputFormat = NumberFormat.getInstance(Locale.GERMAN);
NumberFormat nformat = NumberFormat.getInstance(Locale.US);
nformat.setMaximumFractionDigits(2);
String user_string = "8,747";

try {
    Number my_number = europeanInputFormat.parse(user_string);
    String result = nformat.format(my_number);
    System.out.println("look at result: " + result); // this prints: 8.75
} catch (ParseException | IllegalArgumentException e) {
    e.printStackTrace();
}

输出:

look at result: 8.75

并非所有欧洲国家/地区都使用相同的格式。我第一次使用 Locale.FRENCH。这不起作用,因为法语格式使用 space 而不是点作为千位分隔符。

Link

Wikipedia article on Error hiding, error swallowing or exception swallowing