这可能对您不起作用的原因是使用了无效的空白字符。
格式类期望代码为 160 的字符被描述为“不间断空格”,当您可以传递代码 30 的字符为“空格”时。
您可以运行此代码来检查它。
NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.FRANCE);
String france = "1 599,99 €";
String format = currencyInstance.format(1599.99);
Number number = currencyInstance.parse(format);
System.out.println("France: " + format);
System.out.println("Format: " + format);
System.out.println("Number: " + number);
if(france.equals(format)) {
number = currencyInstance.parse(france); // Must work;
System.out.println(number);
} else {
char[] fr = france.toCharArray();
char[] ft = format.toCharArray();
for(int i = 0; i < fr.length; i++) {
if(fr[i] != ft[i]) {
System.out.printf("The value on position %d are not equal. France: %d; Format: %d", i,(int)fr[i], (int)ft[i]);
}
}
}
然后环境细节:
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
OS: Windows 7 64-bits.
ASCII 表
笔记:
正如@Black Panter 添加的那样,这是已知的错误
JDK-4510618:[Fmt-Nu] 法语千位分隔符是不间断空格
解决方法
(1) 在待解析的String中去掉用户的分组分隔符(即U+0020)。
(2) 如果不方便删除所有空格,请将用户的分组分隔符替换为格式化程序的分组分隔符(U+00A0)。