在C ++中,我有一个要读取的双变量,它用逗号分隔(0,07)。我首先从excel中读取一个字符串并尝试将其转换为double。
string str = "0,07"; // Actually from Excel.
double number = strtod(str .c_str(), NULL);
double number1 = atof(str .c_str());
cout << number<<endl;
cout <<number1<<endl;
它们都返回0作为输出而不是0.07。谁能解释我如何将double转换为0.07而不是0。
答案 0 :(得分:1)
问题是默认语言环境是&#34; C&#34; (对于&#34; Classic&#34;),使用&#39;。&#39;作为小数分隔符,而excel使用其中一个OS。这很可能是一种语言。
你可以:
std::locale("")
的区域设置(以便您的程序使用系统区域设置 - 允许它们相同,请参阅http://en.cppreference.com/w/cpp/locale/locale)答案 1 :(得分:0)
您可以使用:
std::replace(str.begin(), str.end(), ',', '.'); // #include <algorithm>
在转换前用点替换逗号。
工作示例:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string str = "0,07"; // Actually from Excel.
replace(str.begin(), str.end(), ',', '.');
double number = strtod(str.c_str(), NULL);
double number1 = atof(str.c_str());
cout << number << endl;
cout << number1 << endl;
return 0;
}
答案 2 :(得分:0)
这样可以吗?
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str = "0,07"; // Actually from Excel.
int index = str.find(',');
str.replace(index, index+1, '.');
double number = stod(str);
cout << number << endl;
return 0;
}
PS:stod
是c++11
函数,但如果要保持双精度,则需要使用它而不是stof
。否则number
应该是float