2009-05-27 17 views
12

मैं CString कोमें C++ में कैसे परिवर्तित करूं?मैं CS+ को C++ में डबल में कैसे परिवर्तित करूं?

यूनिकोड समर्थन भी अच्छा होगा।

धन्यवाद!

+0

मुझे सच में विश्वास नहीं है कि यह अभी तक नहीं पूछा गया है ... लेकिन खोज ने कुछ भी नहीं बताया। यदि यह एक डुप्लिकेट है, तो कृपया नम्र रहें :) –

+4

या तो यहां जवाब नहीं मिला, लेकिन "डबल टू क्रिस्टिंग" को गुगल करने से आपको पहली हिट पर सही जवाब मिल जाता है। –

+0

@ एंड्रयूबेनब्रिज वास्तव में ऐसा करता है, अगर "सही उत्तर" से आपका मतलब यह पृष्ठ यहां है :) – aquirdturtle

उत्तर

25

एक CString एक LPCTSTR, जो मूल रूप से एक const char* (const wchar_t* यूनिकोड में बनाता है) को बदल सकते हैं।

यह जानकर, आप atof() उपयोग कर सकते हैं: यूनिकोड बनाता

CString thestring("13.37"); 
double d = atof(thestring). 

... या के लिए, _wtof():

CString thestring(L"13.37"); 
double d = _wtof(thestring). 

... या दोनों यूनिकोड और गैर-यूनिकोड बनाता है समर्थन करने के लिए। ..

CString thestring(_T("13.37")); 
double d = _tstof(thestring). 

(_tstof() एक मैक्रो है जो 01 तक फैलता हैया _wtof() किया जाए या नहीं _UNICODE परिभाषित किया गया है के आधार पर)

+2

यह लिंक आपको "wcstod" दिखाता है जो मैं यूनिकोड का समर्थन करने के लिए उपयोग करता हूं। http://msdn.microsoft.com/en-us/library/kxsfc1ab(VS.80).aspx –

+1

यह काम करता है, लेकिन एसएमडी :: स्ट्रिंगस्ट्रीम का आईएमओ मिघमोस का सुझाव थोड़ा क्लीनर है। – Pete

+0

_wcstod_l/_tcstod_l एक को लोकेल निर्दिष्ट करने की अनुमति देता है, इसलिए कोई स्थानीय प्रारूप (दशमलव डेलीमीटर को अल्पविराम या डॉट आदि के रूप में संभाल सकता है) –

1

strtod (या wcstod) स्ट्रिंग को डबल-सटीक मान में परिवर्तित कर देगा।

(आवश्यक है <stdlib.h> या <wchar.h>)

+0

उस पृष्ठ पर कुछ और संदर्भों पर विचार करें जो आप जोड़ रहे हैं –

+0

मेरी पोस्ट अपडेट की गई! – xian

+0

उपयोग उदाहरण या तो अस्वस्थ नहीं होंगे ... स्वीकृत उत्तर देखें। – Shog9

4
पुस्तकालय lexical_cast बढ़ावा साथ

, आप

#include <boost/lexical_cast.hpp> 
using namespace boost; 

... 

double d = lexical_cast<double>(thestring); 
5

तुम कुछ भी करने के लिएकुछ भी परिवर्तित एक std::stringstream का उपयोग कर सकते हैं। एकमात्र आवश्यकता यह है कि ऑपरेटर >> और << लागू किए जाएंगे। स्ट्रिंगस्ट्रीम <sstream> हेडर फ़ाइल में पाया जा सकता है।

std::stringstream converter; 
converter << myString; 
converter >> myDouble; 
+0

यह मेरे लिए अच्छा लगा। दुर्भाग्यवश यह माइक्रोसॉफ्ट (एमएफसी) सीएसटींग प्रकार के साथ यहां प्रश्न पूछे जाने वाले परिदृश्य के लिए काम नहीं करता है। मुझे यह संकलित मिला, लेकिन परिवर्तित डबल नंबर यादृच्छिक प्रतीत होता था, कम से कम इसका स्ट्रिंग से कोई संबंध नहीं था। मुझे उम्मीद है कि यह अन्य प्रकार के लिए अच्छा काम करता है जो << and >> ऑपरेटर को बेहतर ढंग से कार्यान्वित करते हैं। मैं अभी तक सी ++ में std तारों का उपयोग करने में कोई विशेषज्ञ नहीं हूं, लेकिन मेरे लिए एक कनवर्टर जो त्रुटि या अपवाद फेंकने के बिना गलत संख्या में परिणामस्वरूप बहुत खतरनाक है। – Philm

+0

टिप्पणी: अन्य सुझाव यहां, _tstof() ने CSTring को मेरे लिए एक डबल में परिवर्तित करने के लिए ठीक काम किया। – Philm

+0

@ फिलम: यह उत्तर ** ** एमएफसी की 'सीएसटींगिंग' ऑब्जेक्ट्स के साथ ठीक से उपयोग किया जा सकता है। आपको 'ऑपरेटर <<()' की आवश्यकता नहीं है। कन्स्ट्रक्टर के लिए यही है: 'std :: wstringstream कनवर्टर (myString);'। ध्यान दें कि इसके लिए 'CStringW' की आवश्यकता होती है (जो, अधिकांश मामलों में, वैसे भी सही प्रकार है)। हालांकि, वहां अभी भी एक मूक हत्यारा है। यह स्पष्ट, सुरुचिपूर्ण लगता है। और गलत यह रूपांतरण के लिए वर्तमान थ्रेड लोकेल का उपयोग करता है। यह हो सकता है कि आप जो चाहें हो या न हो। एक समाधान का उपयोग करने के लिए बेहतर है जो आपको रूपांतरण के लिए उपयोग करने के लिए लोकेल को स्पष्ट रूप से निर्दिष्ट करने की अनुमति देता है। – IInspectable

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