Maison >développement back-end >C++ >Pourquoi `atof` ne parvient-il pas à convertir `std::string` en `double` dans Qt, et quelles sont les alternatives ?

Pourquoi `atof` ne parvient-il pas à convertir `std::string` en `double` dans Qt, et quelles sont les alternatives ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 19:02:10111parcourir

Why Does `atof` Fail to Convert `std::string` to `double` in Qt, and What Are the Alternatives?

std::string en double problème de conversion : utilisation d'atof avec des projets Qt

Conversion d'un std::string en double à l'aide de atof la fonction peut être problématique dans les projets Qt. Examinons le code et explorons des approches alternatives :

Le code fourni :

std::string num = "0.6";
double temp = (double)atof(num.c_str());

tente de convertir un std::string en double. Cependant, il renvoie zéro. Ce problème survient car les QStrings, couramment utilisées dans Qt, sont transmises en tant que const char*.

Pour résoudre ce problème, convertissez explicitement la QString en double :

QString winOpacity("0.6");
double temp = winOpacity.toDouble();

Alternativement, QByteArray::toDouble peut être utilisé pour des conversions plus rapides lorsque vous travaillez avec const char*.

Pour les projets non-Qt, la syntaxe suivante est valid :

std::string num = "0.6";
double temp = ::atof(num.c_str());

Bien que stringstream ou boost::lexical_cast puissent également effectuer la conversion, ils encourent une pénalité de performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn