एक आम अंतरराष्ट्रीय मुद्दा तारों में प्रतिनिधित्व किए गए डबल मानों का रूपांतरण है। यह सामान कई क्षेत्रों में पाया जाता है।डबल स्ट्रिंग रूपांतरण और लोकेल
csv फ़ाइलें जो या तो
comma separated
या
character separated
कहा जाता है क्योंकि कभी कभी वे की तरह
1.2,3.4
5.6,6.4
अंग्रेजी क्षेत्रों में
या
जमा हो जाती है के साथ शुरूउदाहरण के लिए जर्मन क्षेत्र।
इस पृष्ठभूमि से, यह जानना आवश्यक है कि अधिकांश std :: विधियां लोकेल निर्भर हैं। तो जर्मनी में, वे 1.2 के रूप में "1,2" पढ़ेंगे और इसे "1,2" के रूप में वापस लिखेंगे लेकिन एक अंग्रेजी ओएस के साथ यह "1,2" 1 के रूप में पढ़ेगा और इसे "1" के रूप में वापस लिख देगा।
क्योंकि लोकेल एप्लिकेशन की वैश्विक स्थिति है, इसलिए इसे एक अलग सेटिंग में स्विच करना अच्छा नहीं है; और यहां हम कुछ समस्याओं के साथ हैं जब मुझे एक अंग्रेजी मशीन पर जर्मन सीएसवी फ़ाइल या इसके विपरीत पढ़ना है।
कोड लिखना भी मुश्किल है जो सभी मशीनों पर समान व्यवहार करता है। सी ++ स्ट्रीम प्रति स्ट्रीम एक लोकेल सेटिंग की अनुमति देता है।
class Punctation : public numpunct<wchar_t>
{
public:
typedef wchar_t char_type;
typedef std::wstring string_type;
explicit Punctation(const wchar_t& decimalPoint, std::size_t r = 0) :
decimalPoint_(decimalPoint), numpunct<wchar_t>(r)
{
}
Punctation(const Punctation& rhs) :
decimalPoint_(rhs.decimalPoint_)
{
}
protected:
virtual ~Punctation()
{
};
virtual wchar_t do_decimal_point() const
{
return decimalPoint_;
}
private:
Punctation& operator=(const Punctation& rhs);
const wchar_t decimalPoint_;
};
...
std::locale newloc(std::locale::classic(), new Punctation(L','));
stream.imbue(newloc);
आपको std :: c व्यवहार के साथ एक स्ट्रीम प्रारंभ करने और केवल दशमलव बिंदु को प्रतिस्थापित करने की अनुमति देगा। यह मुझे हजार विभाजक को अनदेखा करने की क्षमता देता है, जो भी प्रभावित हो सकता है। जर्मन 1000.12 "1.000,12" हो सकता है; या अंग्रेजी में "1,000.12" पूर्ण भ्रम में समाप्त हो जाएगा। यहां तक कि "," द्वारा "।" को प्रतिस्थापित किया जा रहा है। इस स्थिति में मदद नहीं करेगा।
मैं
const char decimal_point = *(localeconv()->decimal_point);
उपयोग कर सकते हैं अगर मैं साथ atof
और दोस्तों के काम करना है अपने व्यवहार दलाल करने के लिए।
तो अंतरराष्ट्रीय डबल व्यवहार के लिए केवल एक भयानक सामान है। यहां तक कि मेरा विजुअल स्टूडियो भी समस्याएं चलाता है क्योंकि जर्मन संस्करण vcproj फ़ाइल में संस्करण के रूप में 8,0 लिखना चाहता है, जबकि एक अंग्रेजी संस्करण इसे 8.0 में बदलना चाहता है, जो निश्चित रूप से घटना द्वारा हुआ क्योंकि एक्सएमएल में इसे सभी में 8.0 माना जाता है दुनिया के देश।
तो मैं सिर्फ उन पहलुओं के बारे में पूछने के लिए समस्या का वर्णन करना चाहता था जिन्हें मैंने अनदेखा कर दिया हो। चीज़ें है कि मैं जानता हूँ कि:
- दशमलव पिंट स्थान निर्भर
- हजार विभाजक है लोकेल निर्भर
- प्रतिपादक स्थान निर्भर है
// German English Also known
// decimal point , .
// exponent e/E e/E d/D
// thousand sep . ,
कौन सा देश जो सेटिंग का उपयोग करता है?हो सकता है कि आप मुझे कुछ दिलचस्प उदाहरण जोड़ सकें जो मेरे पास अभी तक नहीं थे।
http://en.wikipedia.org/wiki/Decimal_point#Examples_of_use – Pod