ios - NSDecimalNumber decimalNumberWithString: ignores current locale -
प्रलेखन के अनुसार, क्या NSDecimalSeparator अवधि (जैसा कि संयुक्त राज्य अमेरिका में है, उदाहरण के लिए उपयोग किया जाता है) या अल्पविराम (जैसा कि प्रयोग किया जाता है, उदाहरण के लिए, फ़्रांस में) डिफ़ॉल्ट लोकेल पर निर्भर करता है। लेकिन जब मैं इसे करने की कोशिश करता हूं, तो यह कोड: देता है ... आईओएस 5 और आईओएस 6 दोनों पर आउटपुट के रूप में मैंने स्वीडिश और फ्रेंच के साथ क्षेत्रीय सेटिंग्स के रूप में कोशिश की है क्योंकि इन दोनों देशों ने दशमलव विभाजक के रूप में अल्पविराम (,) का उपयोग किया है। क्या आउटपुट समान नहीं होना चाहिए? (मुझे पता है कि मैं व्यवहार करने के लिए [NSDecimalNumber दशमलव दशमलव संख्याविथस्ट्रेर्ड: लोकेल] का उपयोग कर सकता हूं, इसलिए यह प्रश्न वैकल्पिक खोजने के बारे में नहीं है, बस यह बग है या मैं कुछ गलत कर रहा हूं) NSDecimalNumber केवल संख्या-प्रकार डेटा के लिए एक भंडारण वर्ग है यह एक पार्सर (NSNumberFormatter) चल रहा है, जिस पर आप इसे पास करते हैं, उसका नंबर बनाते हैं। इसका कारण है कि आपका दूसरा लॉग स्टेटमेंट "बेहतर" काम करता है क्योंकि पहले वाला एक डिफ़ॉल्ट संख्या प्रारूप लोकेल का उपयोग कर रहा है (यह जैसा दिखता है यह en_US है, लेकिन मैं इसे सत्यापित नहीं कर सकता, संपादित करें अधिक जानकारी के लिए झटका ।), और "100,1" एक मान्य संख्या नहीं है, इसलिए "गैर-संख्या" भाग को छीन लिया जाता है। "," दशमलव विभाजक को पूर्ण स्थान पर कैप्चर करने वाले किसी लोकेल को निर्दिष्ट करके। जब आप NSLog () एक NSDecimalNumber करते हैं तो यह बस @ "100.1"]; एनएसएलॉग (@ "% @", नंबर); NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init]; [सेटर सेटनम्बर स्टाइल: NSNumberFormatterDecimalStyle]; NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier: @ "fr_FR"]; [सेटर सेटलोकेल: लोकेल]; एनएसएलॉग (@ "% @", [फॉर्मर स्ट्रिंगफ़ॉर्मनम्बर: नंबर]); या, संक्षेप में यदि आप वर्तमान लोकेल का उपयोग करना चाहते हैं। सारांश में: संपादित करें: / Strong> ठीक है, मैंने इस पर कुछ और शोध किया है। GNUStep में ऐसा लगता है कि यह कुछ प्रयोग करने से मैंने पाया है कि निम्न में से कोई भी डिफ़ॉल्ट पार्सिंग व्यवहार को प्रभावित नहीं करता है, जहां तक मैं बता सकता हूं: और जाहिर है यह [NSDecimalNumber दशमलव संख्याविथस्ट्रिंग:] को लोकेल दशमलव विभाजक का उपयोग करना चाहिए:
NSLog (@ "% @", [NSDecimalNumber दशमलवसमूहविथः स्ट्रिंग: @ "100.1"]); एनएसएलॉग (@ "% @", [एनएसडीसीमलनम्बर दशमलवसमूहविथः स्ट्रिंग: @ "100,1" लोकेल: एनएसएलोकैले। कंटेंट लोकल]);
100 100.1
-description को कॉल कर रहा है, जिसमें कोई लोकेल संदर्भ नहीं है
NSDecimalNumber * number = [NSDecimalNumber दशमलव संख्याविथः स्ट्रिंग:
NSDecimalNumber * number = [NSDecimalNumber दशमलवसमूहविथस्ट्रिंग: @ "100.1"]; NSLog (@ "% @", [NSNumberFormatter स्थानीयकृत स्ट्रिंगफ़ॉर्मनम्बर: संख्या संख्या शैली: NSNumberFormatterDecimalStyle]);
- [NSLocale currentLocale]) के लोकेल से मेल खाना चाहिए। > यहाँ एक अच्छी पसंद है।)
NSDecimalSeparator के लिए मान का उपयोग करके समाप्त होता है
NSUserDefaults (उनके कोड की त्वरित ब्राउज़िंग से)।
NSDecimalSeparator में
NSUserDefaults ।
AppleLocale में
NSUserDefaults ।
NSLocaleCode में
NSUserDefaults ।
CFBundleDevelopmentRegion के लिए मान सेट < / कोड>।
LANG /
LC_ALL / etc ... मान।
+ [NSLocale सिस्टम लॉकल] ।
+ [NSLocale currentLocale] नहीं है, क्योंकि यह प्रश्न इस तथ्य से उत्पन्न होता है कि वर्तमान लोकेल का कोई प्रभाव नहीं है ।
Comments
Post a Comment