Rumah >pembangunan bahagian belakang >C++ >Mengapakah `atof` Mengembalikan Sifar Apabila Menukar `std::string` kepada `double`?

Mengapakah `atof` Mengembalikan Sifar Apabila Menukar `std::string` kepada `double`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 14:28:11430semak imbas

Why Does `atof` Return Zero When Converting `std::string` to `double`?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn