Ami*_*Nag 6 java number-formatting
public class NumFormatTest
{
public static void main(String[] args) throws ParseException
{
String num = "1 201";
DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
System.out.println("Number Before parse: "+num);
double dm = df.parse(num).doubleValue();
System.out.println("Number After parse: "+dm);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Number Before parse: 1 201
Number After parse: 1.0
Run Code Online (Sandbox Code Playgroud)
预期产出:
Number Before parse: 1 201
Number After parse: **1201**
Run Code Online (Sandbox Code Playgroud)
可以请任何帮助我理解为什么解析不能将FRENCH语言环境格式化字符串(1 201)转换为普通双值(1201.0)?
有两种空间."正常"空格字符(No.32-HEX 0x20)和非中断空格(NBSP)(No.160-HEX 0xA0).
由于某种原因(我不知道为什么)法语区域设置希望数字之间的空白字符是非破坏空间!您可以使用以下代码来帮助自己:
String num = "1 201";
num = num.replaceAll(" ", "\u00A0"); // '\u00A0' is the non breaking whitespace character!
Run Code Online (Sandbox Code Playgroud)
这样您的代码就会像预期的那样工作.请注意,如果您double将a 格式化为String带有法语区域设置,则生成的空白字符也将是NBSP!
DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRENCH);
System.out.println(df.format(1201.1));
// This will print "1 202,1" But the space character will be '\u00A0'!
Run Code Online (Sandbox Code Playgroud)