J'essaie de convertir std::string
en float/double
. J'ai essayé:
std::string num = "0.6";
double temp = (double)atof(num.c_str());
Mais il retourne toujours zéro. De toute autre manière?
J'essaie de convertir std::string
en float/double
. J'ai essayé:
std::string num = "0.6";
double temp = (double)atof(num.c_str());
Mais il retourne toujours zéro. De toute autre manière?
std::string num = "0.6";
double temp = ::atof(num.c_str());
Le fait pour moi, c’est une syntaxe C ++ valide pour convertir une chaîne en double.
Vous pouvez le faire avec stringstream ou boost :: lexical_cast, mais ceux-ci viennent avec une pénalité de performance.
Ahaha vous avez un projet Qt ...
QString winOpacity("0.6");
double temp = winOpacity.toDouble();
Note supplémentaire:
Si les données d'entrée sont un const char*
, QByteArray::toDouble
sera plus rapide.
La Bibliothèque Standard C++(C ++ 11) offre les fonctionnalités souhaitées avec std::stod
:
std::string s = "0.6"
std::wstring ws = "0.7"
double d = std::stod(s);
double dw = std::stod(ws);
Je suppose que la Bibliothèque Standard convertit en interne, mais ça rend le code plus propre. Généralement pour la plupart des autres types de base, reportez - <string>
. Il y a quelques nouvelles fonctionnalités pour les chaînes C, trop. Voir <stdlib.h>
Vous pouvez utiliser std :: stringstream:
#include <sstream>
#include <string>
template<typename T>
T StringToNumber(const std::string& numberAsString)
{
T valor;
std::stringstream stream(numberAsString);
stream >> valor;
if (stream.fail()) {
std::runtime_error e(numberAsString);
throw e;
}
return valor;
}
Usage:
double number= StringToNumber<double>("0.6");
Oui, avec une distribution lexicale. Utilisez un stringstream et l'opérateur <<, ou utilisez Boost, ils l'ont déjà implémenté.
Votre propre version pourrait ressembler à:
template<typename to, typename from>to lexical_cast(from const &x) {
std::stringstream os;
to ret;
os << x;
os >> ret;
return ret;
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.