Java: what's the difference between the sv and sv_SE locale?

社会主义新天地 提交于 2019-12-10 13:22:44

问题


I tried to parse a string (-0,3) to a double in java using Swedish locale using this code:

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

When I tried with the sv_SE locale the result was -3.0, which, obviously, is incorrect. I then, after a lot of headache changed the locale to sv (as in the example above) and then the result was correct, -0,3.

According to http://www.localeplanet.com/java/sv/index.html and http://www.localeplanet.com/java/sv-SE/index.html the decimal separator (Decimalavgränsare) in both cases is comma (,) so why this difference?

(I tried to tag this with some tags related to Sweden such as sv_SE but I didn't have enough reputation points to add new tags. Feel free to add tags if you can.)


回答1:


If you try to create Locale like new Locale("sv_SE"), then it will fail to match it through the ISO 639 standard used to detect language (yes if there is only one parameters it is threatened as language, check the documentation). In your case you should use new Locale("sv","SE") to correctly setup the country, otherwise, since the matching for language fails, default language is used (which in your case seem to be English). In English, the comma is used for digit grouping and not as decimal mark, that is why the result you have in unexpected but correct.



来源:https://stackoverflow.com/questions/26252824/java-whats-the-difference-between-the-sv-and-sv-se-locale

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!