Chaîne C ++ à double conversion

Habituellement, lorsque j’écris quelque chose en C ++ et que je dois convertir un caractère en un int je int simplement un nouvel int égal au caractère.

J’ai utilisé le code (extrait)

  ssortingng word; openfile >> word; double lol=word; 

Je reçois l’erreur que

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

Qu’est-ce que l’erreur signifie exactement? Le premier mot est le nombre 50. Merci 🙂

Vous pouvez facilement convertir char en int et vice-versa car, pour la machine, int et char sont identiques, 8 bits. La seule différence est qu’ils doivent être affichés à l’écran, si le nombre est 65 et est enregistré en tant que char, alors il affichera ‘A’, s’il est enregistré en tant qu’int, il affichera 65.

Avec les autres types, les choses changent, car elles sont stockées différemment dans la mémoire. Il existe une fonction standard en C qui vous permet de convertir une chaîne en double facilement, c’est atof. (Vous devez inclure stdlib.h)

 #include  int main() { ssortingng word; openfile >> word; double lol = atof(word.c_str()); /*c_str is needed to convert ssortingng to const char* previously (the function requires it)*/ return 0; } 
 #include  #include  using namespace std; int main() { cout << stod(" 99.999 ") << endl; } 

Sortie: 99.999 (ce qui est double, les espaces sont automatiquement supprimés)

Depuis C ++ 11, la conversion de chaîne en valeurs à virgule flottante (comme double) est disponible avec les fonctions suivantes:
stof - convertit str en float
stod - convertit str en double
stold - convertit str en un double long

Comme la conversion de ssortingng en int était également mentionnée dans la question, les fonctions suivantes sont disponibles dans C ++ 11:
stoi - convertit str en int
stol - convertit str en un long
stoul - convertit str en un long non signé
stoll - convertit str en un long long
stoull - convertit str en un long long non signé

Le problème est que C ++ est un langage de type statique, ce qui signifie que si quelque chose est déclaré en tant que ssortingng , c’est une chaîne, et si quelque chose est déclaré en tant que double , c’est un double. Contrairement à d’autres langages tels que JavaScript ou PHP, il n’existe aucun moyen de convertir automatiquement une chaîne en valeur numérique, car la conversion risque de ne pas être bien définie. Par exemple, si vous essayez de convertir la chaîne "Hi there!" à un double , il n’y a pas de conversion significative. Bien sûr, vous pouvez simplement définir le double sur 0.0 ou NaN, mais cela masquerait certainement le fait qu’il existe un problème dans le code.

Pour résoudre ce problème, ne mettez pas le contenu du fichier sous forme de tampon dans une chaîne. Au lieu de cela, il suffit de lire directement dans le double :

 double lol; openfile >> lol; 

Cela lit directement la valeur sous forme de nombre réel et, si une erreur se produit, la méthode .fail() du stream renvoie true. Par exemple:

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

Si vous lisez un fichier, écoutez le conseil et mettez-le simplement en double.

Par contre, si vous avez une chaîne, par exemple, vous pouvez utiliser lexical_cast de boost .

Voici un exemple (très simple):

 int Foo(std::ssortingng anInt) { return lexical_cast(anInt); } 

La façon de résoudre les conversions en C ++ (pas le C classique) est illustrée avec le programme ci-dessous. Notez que l’intention est de pouvoir utiliser les mêmes fonctionnalités de formatage offertes par iostream, telles que la précision, le caractère de remplissage, le remplissage, l’hex et les manipulateurs, etc.

Comstackz et exécutez ce programme, puis étudiez-le. C’est simple

 #include "iostream" #include "iomanip" #include "sstream" using namespace std; int main() { // Converting the content of a char array or a ssortingng to a double variable double d; ssortingng S; S = "4.5"; issortingngstream(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 ssortingng cout << "\nThe value of the string variable S is " << S << endl; return 0; } 

Prof. Martinez

La couverture de chaîne en double peut être obtenue en utilisant la fonction ‘strtod ()’ de la bibliothèque ‘stdlib.h’

 #include  #include  int main () { std::ssortingng data="20.9"; double value = strtod(data.c_str(), NULL); std::cout< 
 #include  #include  double _ssortingng_to_double(std::ssortingng 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; } 

ou

 //In case you want to convert from different bases. #include  #include  #include  double _ssortingng_to_double(std::ssortingng 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)<