Mengapa std::string kepada Penukaran Berganda dengan atof Mengembalikan Sifar
Apabila cuba menukar std::string kepada dua kali ganda menggunakan atof, pengguna mungkin menghadapi situasi di mana nilai yang dikembalikan adalah sifar secara konsisten. Untuk memahami puncanya, mari kita mendalami kod yang berkaitan dan meneroka pendekatan alternatif untuk menyelesaikan isu ini.
atof Usage in std::string to Double Conversion
The atof fungsi biasanya digunakan untuk menukar tatasusunan aksara yang ditamatkan nol kepada nilai titik terapung berketepatan ganda. Walau bagaimanapun, apabila menggunakan std::string, isu timbul kerana std::string bukanlah tatasusunan aksara yang ditamatkan nol. Ini mengakibatkan atof tidak dapat menghuraikan rentetan dengan betul dan mengembalikan sifar.
Penggunaan atof yang betul dengan std::string
Untuk menyelesaikan isu ini, seseorang mesti menukar std::string ke tatasusunan aksara yang ditamatkan nol sebelum menggunakan atof. Ini boleh dicapai dengan menggunakan fungsi ahli c_str() std::string. Kod yang betul sepatutnya menyerupai:
std::string num = "0.6"; double temp = ::atof(num.c_str());
Dalam senario ini, ::atof() memastikan bahawa skop global fungsi digunakan dan bukannya skop setempat, di mana atof tidak ditentukan apabila menggunakan Qt.
Kaedah Penukaran Alternatif
Selain daripada menggunakan atof, lain-lain kaedah wujud untuk menukar std::string kepada double, such sebagai:
std::stringstream:
std::stringstream ss(num); double temp; ss >> temp;
boost::lexical_cast:
#include <boost/lexical_cast.hpp> double temp = boost::lexical_cast<double>(num);
Walau bagaimanapun, kaedah ini mungkin dikenakan penalti prestasi berbanding menggunakan atof dengan penukaran rentetan yang sesuai.
Pertimbangan Khusus untuk Projek Qt
Jika bekerja dengan projek Qt, QString menyediakan kemudahan untukDouble( ) kaedah yang memudahkan rentetan untuk menggandakan penukaran dengan lebih cekap daripada menggunakan std::string. Contohnya:
QString winOpacity("0.6"); double temp = winOpacity.toDouble();
Selain itu, untuk input data dalam bentuk const char*, QByteArray::toDouble menawarkan prestasi yang lebih baik.
Atas ialah kandungan terperinci Mengapakah `atof` Mengembalikan Sifar Apabila Menukar `std::string` kepada `double`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!