Java: в чем разница между локалью sv и sv_SE?

Я попытался разобрать строку (-0,3) на двойную в java, используя шведскую локаль, используя этот код:

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, но у меня не хватило очков репутации, чтобы добавить новые теги. Не стесняйтесь добавлять теги, если можете.)


person d-b    schedule 08.10.2014    source источник


Ответы (1)


Если вы попытаетесь создать Locale как new Locale("sv_SE"), то он не сможет сопоставить его с помощью стандарта ISO 639, используемого для определения языка (да, если есть только один параметр, он находится под угрозой как язык, проверьте документацию). В вашем случае вы должны использовать new Locale("sv","SE") для правильной настройки страны, в противном случае, поскольку сопоставление языка не удается, используется язык по умолчанию (который в вашем случае кажется английским). В английском языке запятая используется для группировки цифр, а не как десятичный знак, поэтому результат у вас неожиданный, но правильный.

person Serhiy    schedule 08.10.2014