将字符串转换为由逗号分隔的双变量(0,07)

时间:2015-08-14 14:58:28

标签: c++ double

在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。

3 个答案:

答案 0 :(得分:1)

问题是默认语言环境是&#34; C&#34; (对于&#34; Classic&#34;),使用&#39;。&#39;作为小数分隔符,而excel使用其中一个OS。这很可能是一种语言。

你可以:

  • 要求发起人使用类似英语的语言环境导出数据
  • 在您的程序中设置基于std::locale("")的区域设置(以便您的程序使用系统区域设置 - 允许它们相同,请参阅http://en.cppreference.com/w/cpp/locale/locale
  • 使用基于拉丁语的区域设置(例如IT或ES)为您设置程序
  • 在尝试将其解释为数字之前,忽略语言环境并将字符串中的&#34;,&#34; -s替换为&#34;。&#34; -s。 (见std::replace

答案 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:stodc++11函数,但如果要保持双精度,则需要使用它而不是stof。否则number应该是float