Java:sv 和 sv_SE 语言环境有啥区别?

Posted

技术标签:

【中文标题】Java:sv 和 sv_SE 语言环境有啥区别?【英文标题】:Java: what's the difference between the sv and sv_SE locale?Java:sv 和 sv_SE 语言环境有什么区别? 【发布时间】:2014-10-08 08:53:24 【问题描述】:

我尝试使用以下代码在 Java 中使用瑞典语言环境将字符串 (-0,3) 解析为双精度:

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.html 和http://www.localeplanet.com/java/sv-SE/index.html,这两种情况下的小数分隔符 (Decimalavgränsare) 都是逗号 (,) 那么为什么会有这种差异呢?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Java:sv 和 sv_SE 语言环境有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

int和integer有啥区别

使用指定的语言环境 (sv) 和 NumberFormat 将字符串解析为 Long

语言环境和编码(终端)有啥区别

C++和VisualC++有啥区别?

金士顿v+200和v300有啥区别

Python IDLE与python有啥区别