Java:sv和sv_SE语言环境之间的区别是什么?

时间:2014-10-08 08:53:24

标签: java parsing double locale comma

我尝试使用以下代码使用瑞典语语言环境将字符串(-0,3)解析为java中的double:

String DoubleString = "-0,3"
NumberFormat swedishNumberFormat = NumberFormat.getInstance(new Locale("sv"));
System.out.println(swedishNumberFormat.parse(doubleString).doubleValue());

当我尝试使用sv_SE语言环境时,结果为-3.0,这显然是不正确的。然后,在很多头痛之后,将语言环境更改为sv(如上例所示),然后结果是正确的,-0,3。

根据http://www.localeplanet.com/java/sv/index.htmlhttp://www.localeplanet.com/java/sv-SE/index.html,两个案例中的小数点分隔符(Decimalavgränsare)都是逗号(,),为什么会出现这种差异?

(我尝试使用与瑞典相关的一些标签来标记这个,例如sv_SE,但我没有足够的声誉点来添加新标签。如果可以,请随意添加标签。)

1 个答案:

答案 0 :(得分:7)

如果您尝试创建Locale new Locale("sv_SE"),那么它将无法通过用于检测语言的ISO 639标准来匹配(是的,如果只有一个参数,它会受到语言威胁,检查文档)。在您的情况下,您应该使用new Locale("sv","SE")来正确设置国家/地区,否则,由于语言匹配失败,因此使用默认语言(在您的情况下似乎是英语)。在英语中,逗号用于数字分组而不是十进制标记,这就是为什么你的结果出乎意料但是正确的。