国际化的 NumberFormat
NumberFormat for internationalization
我正尝试在 Android 上将我的应用程序国际化。
我知道在欧洲以及世界其他地方,小数和数字的表示方式与 U.S.
不同
我正在尝试使用 NumberFormat 来帮助我更改代表欧洲小数的字符串输入。
所以,例如:
- String number1 = "8,765" 格式化后应该变成 "8.77"
数字格式
- 用 NumberFormat
格式化后,字符串 number2 = "1.203" 应该变成 "1,203"
- 字符串 number3 = "1.203,5632" 在用 NumberFormat
格式化后应该变成 "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
我正尝试在 Android 上将我的应用程序国际化。 我知道在欧洲以及世界其他地方,小数和数字的表示方式与 U.S.
不同我正在尝试使用 NumberFormat 来帮助我更改代表欧洲小数的字符串输入。 所以,例如:
- String number1 = "8,765" 格式化后应该变成 "8.77" 数字格式
- 用 NumberFormat 格式化后,字符串 number2 = "1.203" 应该变成 "1,203"
- 字符串 number3 = "1.203,5632" 在用 NumberFormat 格式化后应该变成 "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