2014-10-08 3 views
5

मैं इस कोड का उपयोग स्वीडिश स्थान का उपयोग कर जावा में एक डबल के लिए एक स्ट्रिंग (-0,3) को पार्स करने की कोशिश की:जावा: sv और sv_SE लोकेल के बीच क्या अंतर है?

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 के रूप में स्वीडन से संबंधित कुछ टैग के साथ इस टैग करने के लिए कोशिश की, लेकिन मैं काफी प्रतिष्ठा अंक नए टैग जोड़ने की जरूरत नहीं है। यदि आप कर सकते हैं टैग जोड़ने के लिए स्वतंत्र महसूस।)

उत्तर

6

आप का प्रयास करें Localenew Locale("sv_SE") जैसे बनाने के लिए, तो यह भाषा का पता लगाने के लिए उपयोग किए जाने वाले आईएसओ 639 मानक के माध्यम से मिलान करने में विफल रहेगा (हाँ यदि केवल एक पैरामीटर है जिसे इसे भाषा के रूप में धमकाया गया है, तो दस्तावेज़ीकरण की जांच करें)। आपके मामले में आपको देश को सही ढंग से सेटअप करने के लिए new Locale("sv","SE") का उपयोग करना चाहिए, अन्यथा, चूंकि भाषा के मिलान के लिए मिलान विफल रहता है, डिफ़ॉल्ट भाषा का उपयोग किया जाता है (जो आपके मामले में अंग्रेज़ी प्रतीत होता है)। अंग्रेजी में, अल्पविराम का उपयोग अंकों के समूह के लिए किया जाता है, न कि दशमलव चिह्न के रूप में, यही कारण है कि आपके पास अप्रत्याशित लेकिन सही परिणाम है।

संबंधित मुद्दे