में दशमलव अंकों की संख्या बढ़ाने के लिए std :: stod() tweak करने का कोई तरीका है (स्ट्रिंग टू डबल) रूपांतरण और यूएस लोकेल का उपयोग करने के लिए मजबूर करने के लिए? मैं डबल विधि के लिए एक स्ट्रिंग है कि नई सी ++ 11 Stod लपेटता हैदशमलव विभाजक के लिए std :: stod (double to string) को tweak कैसे करें और
if (opt->getFlag('c') || opt->getFlag("console")){
ThreadManager modelMainThread;
modelMainThread.runFromConsole(inputFileName,scenarioName);
}
else {
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show();
return app.exec();
}
इस आवेदन के भीतर::
मैं एक क्यूटी आवेदन है कि दोनों कंसोल या GUI मोड में चलाया जा सकता है है
double s2d (const string &string_h) const {
try {
return stod(string_h);
} catch (...) {
if (string_h == "") return 0;
else {
cout << "error!" << endl;
}
}
return 0;
}
कंसोल मोड में स्ट्रिंग मोड में स्ट्रिंग को दशमलव विभाजक के रूप में डॉट के साथ स्ट्रिंग की अपेक्षा करता है, गुई मोड में, इसके बजाय कॉमा के साथ एक स्ट्रिंग की अपेक्षा करता है। इसके अलावा, जैसा कि मैंने पहले से istringstream उपयोग कर रहा था:
istringstream totalSString(valueAsString);
totalSString >> valueAsDouble;
मैंने देखा है कि Stod सिर्फ 3 दशमलव अंक, istringstream से काफी कम करने के लिए डबल जिसके परिणामस्वरूप ट्रंकेटस।
तो क्या दशमलव अंकों की संख्या बढ़ाने और रूपांतरण के लिए यूएस लोकेल का उपयोग करने के लिए std :: stod को मजबूर करने का कोई तरीका है? :-)
धन्यवाद
संपादित:
अगर मैं इस स्क्रिप्ट का प्रयास करें:
// testing stod() ..
vector<string> numbers;
numbers.push_back("123.1234567890");
numbers.push_back("123.1234");
numbers.push_back("123,1234567890");
numbers.push_back("123,1234");
double outd;
for(uint i=0;i<numbers.size();i++){
try {
outd = stod(numbers[i]);
cout << "Conversion passed: " << numbers[i] << " - " << outd << endl;
} catch (...) {
cout << "Conversion DID NOT passed: " << numbers[i] << " - " <<endl;
}
}
मुझे मिल इन परिणामों:
"कंसोल" मोड:
Conversion passed: 123.1234567890 - 123.123
Conversion passed: 123.1234 - 123.123
Conversion passed: 123,1234567890 - 123
Conversion passed: 123,1234 - 123
"जीयूआई" मोड:
Conversion passed: 123.1234567890 - 123
Conversion passed: 123.1234 - 123
Conversion passed: 123,1234567890 - 123.123
Conversion passed: 123,1234 - 123.123
तो स्पष्ट रूप से नहीं है कुछ को प्रभावित करने Stod() व्यवहार!
'stod' को'% f' के साथ 'sprintf' का उपयोग करने के रूप में परिभाषित किया गया है। यह विन्यास योग्य नहीं है। –
यदि आप कच्चे रनटाइम की गति से चिंतित हैं और लोकेल आजादी चाहते हैं, और संभावित रूप से खराब संकलन समय के बारे में चिंतित नहीं हैं, [बूस्ट। पाइरिट] (http://www.boost.org/libs/spirit/) .Qi है बिल्कुल जाने का रास्ता। – ildjarn
इस पर ठोकर खाई और चौंक गया कि स्टोड मूल्यों को कम कर देता है। लेकिन समस्या यह है कि std :: cout पूरे मान को आउटपुट नहीं करता है। आपको उच्च परिशुद्धता सेट करनी है: std :: cout << std :: setprecision (16); – ead