有没有办法调整 std::stod() 以增加(字符串到双精度)转换中的小数位数并强制它使用美国语言环境?
我有一个可以在控制台或 gui 模式下运行的 Qt 应用程序:
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();
}
在这个应用程序中,我有一个包含新 C++11 stod 的 string to double 方法:
double s2d ( const string &string_h) const {
try {
return stod(string_h);
} catch (...) {
if (string_h == "") return 0;
else {
cout << "error!" << endl;
}
}
return 0;
}
奇怪的是,在控制台模式下,字符串到双重转换需要一个带点作为小数分隔符的字符串,而在 gui 模式下,它需要一个带逗号的字符串。此外,正如我之前使用 istringstream 的那样:
istringstream totalSString( valueAsString );
totalSString >> valueAsDouble;
我注意到 stod 将生成的 double 截断为仅 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
“gui”模式:
Conversion passed: 123.1234567890 - 123
Conversion passed: 123.1234 - 123
Conversion passed: 123,1234567890 - 123.123
Conversion passed: 123,1234 - 123.123
很明显,有些东西会影响 stod() 的行为!