C ++字符串转换为双倍

时间:2011-01-20 23:49:59

标签: c++ string file double

通常当我用C ++编写任何东西并且我需要将char转换为int时,我只需要创建一个等于char的新int

我使用了代码(代码段)

 string word;  
 openfile >> word;
 double lol=word;

我收到错误

Code1.cpp cannot convert `std::string' to `double' in initialization 

错误究竟意味着什么?第一个单词是数字50.谢谢:)

7 个答案:

答案 0 :(得分:53)

你可以很容易地将char转换为int而反之亦然,因为对于机器而言int和char是相同的,8位,唯一的区别在于它们必须在屏幕中显示,如果数字是65并且保存为一个char,然后它会显示'A',如果它保存为int,它将显示65。

对于其他类型的东西会发生变化,因为它们在内存中的存储方式不同。在C中有标准功能,允许您轻松地从字符串转换为双倍,它是atof。 (您需要包含stdlib.h)

#include <stdlib.h>

int main()
{
    string word;  
    openfile >> word;
    double lol = atof(word.c_str()); /*c_str is needed to convert string to const char*
                                     previously (the function requires it)*/
    return 0;
}

答案 1 :(得分:25)

#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << stod("  99.999  ") << endl;
}

输出:99.999(这是双倍的,空格被自动剥离)

由于C ++ 11将字符串转换为浮点值(如double),因此可以使用函数:
stof - 将str转换为浮点数
stod - 将str转换为双倍 stold - 将str转换为long double

在问题中也提到了将string转换为int,C ++ 11中有以下函数:
stoi - 将str转换为int
stol - 将str转换为长的 stoul - 将str转换为无符号长号 stoll - 将str转换为long long stoull - 将str转换为无符号长long

答案 2 :(得分:14)

问题在于C ++是一种静态类型的语言,这意味着如果某些东西被声明为string,那么它就是一个字符串,如果某个东西被声明为double,那么它就是双重的。与JavaScript或PHP等其他语言不同,无法自动将字符串转换为数字值,因为转换可能没有明确定义。例如,如果您尝试将字符串"Hi there!"转换为double,则无法进行有意义的转换。当然,你可以double设置为0.0或NaN,但这几乎肯定会掩盖代码中存在问题的事实。

要解决此问题,请不要将文件内容缓冲到字符串中。相反,只需直接阅读double

double lol;
openfile >> lol;

这直接将值读取为实数,如果发生错误将导致流的.fail()方法返回true。例如:

double lol;
openfile >> lol;

if (openfile.fail()) {
    cout << "Couldn't read a double from the file." << endl;
}

答案 3 :(得分:4)

如果您正在阅读文件,那么您应该听到给出的建议并将其放入双重文件中。

另一方面,如果你有一个字符串,你可以使用boost lexical_cast

这是一个(非常简单的)示例:

int Foo(std::string anInt)
{
   return lexical_cast<int>(anInt);
}

答案 4 :(得分:1)

下面的程序说明了解决转换(而不是经典C)的C ++方法。请注意,目的是能够使用iostream提供的相同格式设施,如精度,填充字符,填充,十六进制和操纵器等。

编译并运行该程序,然后进行研究。这很简单

#include "iostream"
#include "iomanip"
#include "sstream"
using namespace std;

int main()
{
    // Converting the content of a char array or a string to a double variable
    double d;
    string S;
    S = "4.5";
    istringstream(S) >> d;    
    cout << "\nThe value of the double variable d is " << d << endl;
    istringstream("9.87654") >> d;  
    cout << "\nNow the value of the double variable d is " << d << endl;



    // Converting a double to string with formatting restrictions
    double D=3.771234567;

    ostringstream Q;
    Q.fill('#');
    Q << "<<<" << setprecision(6) << setw(20) << D << ">>>";
    S = Q.str(); // formatted converted double is now in string 

    cout << "\nThe value of the string variable S is " << S << endl;
    return 0;
}

教授。 Martinez的

答案 5 :(得分:0)

从字符串到双精度的转换可以通过 使用库'stdlib.h'中的'strtod()'函数

#include <iostream>
#include <stdlib.h>
int main () 
{
    std::string data="20.9";
    double value = strtod(data.c_str(), NULL);
    std::cout<<value<<'\n';
    return 0;
}

答案 6 :(得分:-1)

#include <string>
#include <cmath>
double _string_to_double(std::string s,unsigned short radix){
double n = 0;
for (unsigned short x = s.size(), y = 0;x>0;)
if(!(s[--x] ^ '.')) // if is equal
n/=pow(10,s.size()-1-x), y+= s.size()-x;
else
    n+=( (s[x]-48) * pow(10,s.size()-1-x - y) );
return n;
}

//In case you want to convert from different bases.
#include <string>
#include <iostream>
#include <cmath>
double _string_to_double(std::string s,unsigned short radix){
double n = 0;
for (unsigned short x = s.size(), y = 0;x>0;)
if(!(s[--x] ^ '.'))
n/=pow(radix,s.size()-1-x), y+= s.size()-x;
else
    n+=( (s[x]- (s[x]<='9' ? '0':'0'+7)   ) * pow(radix,s.size()-1-x - y) );
return n;
}
int main(){
std::cout<<_string_to_double("10.A",16)<<std::endl;//Prints 16.625
std::cout<<_string_to_double("1001.1",2)<<std::endl;//Prints 9.5
std::cout<<_string_to_double("123.4",10)<<std::endl;//Prints 123.4
return 0;
}