Rumah >pembangunan bahagian belakang >C++ >Mengapakah `atof` Mengembalikan Sifar Apabila Menukar `std::string` kepada `double`?
Menyelesaikan masalah Isu Penukaran
Dalam percubaan untuk menukar std::string kepada menggandakan menggunakan atof, pembangun menghadapi isu yang tidak dijangka di mana penukaran secara konsisten mengembalikan sifar. Ralat ini boleh mengecewakan, terutamanya bagi pengguna yang telah mengikuti sintaks standard.
Kod bermasalah yang dimaksudkan:
std::string num = "0.6"; double temp = (double)atof(num.c_str());
Untuk menyelesaikan isu ini, adalah penting untuk diingat bahawa atof memerlukan const char bukannya std::string sebagai inputnya. Ini bermakna kita perlu menukar std::string kepada const char menggunakan kaedah c_str(). Walau bagaimanapun, dalam coretan kod yang disediakan, kaedah c_str() tersilap disertakan dalam kurungan, yang tidak diperlukan. Sintaks yang betul hendaklah:
std::string num = "0.6"; double temp = ::atof(num.c_str());
Pengubahsuaian ini membolehkan fungsi atof menghuraikan rentetan dengan betul dan menukarnya kepada dua kali ganda.
Untuk pengguna yang bekerja dengan projek Qt, pendekatan alternatif ialah untuk menggunakan kaedah QString::toDouble(), yang direka khusus untuk menukar QString kepada beregu. Kaedah ini biasanya lebih pantas daripada atof apabila berurusan dengan input QString.
QString winOpacity("0.6"); double temp = winOpacity.toDouble();
Perlu diperhatikan bahawa QByteArray::toDouble mungkin menawarkan prestasi yang lebih baik apabila bekerja dengan input char const*.
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!