C ++ strtod () - Perpustakaan Standard C ++

Fungsi strtod () dalam C ++ menafsirkan isi rentetan sebagai nombor titik terapung dan mengembalikan nilainya sebagai dua.

Fungsi ini juga menetapkan penunjuk untuk menunjuk ke watak pertama setelah aksara rentetan terakhir yang sah jika ada, jika tidak, penunjuk diatur ke nol.

Untuk asas 10 dan tali "12abc"

Bahagian angka yang sah -> 12

Watak pertama selepas bahagian berangka yang sah -> a

Ia ditakrifkan dalam fail tajuk.

prototaip strtod ()

 double strtod (const char * str, char ** end);

Fungsi strtod () mengambil rentetan dan penunjuk ke watak sebagai parameternya, menafsirkan isi rentetan sebagai floatnombor dan mengembalikan doublenilai.

strtod () Parameter

  • str : Rentetan yang mempunyai perwakilan nombor titik terapung.
  • akhir : Rujukan ke objek yang sudah diperuntukkan dari jenis char *. Nilai akhir ditetapkan oleh fungsi ke watak seterusnya dalam str selepas watak terakhir yang sah. Parameter ini juga dapat menjadi penunjuk nol, dalam hal ini tidak digunakan.

strtod () Nilai pulangan

Fungsi strtod () mengembalikan:

  • nilai berganda (yang ditukarkan dari rentetan).
  • 0.0 sekiranya tiada penukaran yang sah dapat dilakukan.

Sekiranya nilai yang ditukar berada di luar julat, ralat ralat berlaku dan HUGE_VAL positif atau negatif dikembalikan.

Contoh 1: Bagaimana fungsi strtod () berfungsi?

 #include #include using namespace std; int main() ( char numberString() = "12.44b 0xy"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Semasa anda menjalankan program, outputnya adalah:

 Nombor dalam String Akhir = 12.44b 0xy Nombor dalam Double = 12.44 String = b 0xy

Contoh 2: fungsi strtod () tanpa mengekori watak

 #include #include using namespace std; int main() ( char numberString() = "12.44"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; // If end is not Null if (*end) ( cout << end; ) // If end is Null else ( cout << "Null pointer"; ) return 0; ) 

Semasa anda menjalankan program, outputnya adalah:

 Nombor dalam Rentetan Akhir = 12.44b 0xy Nombor dalam Double = 12.44 Penunjuk kosong

Nilai floating-point yang sah untuk fungsi strtod () terdiri daripada tanda + atau - pilihan diikuti oleh salah satu set berikut:

  • Untuk nilai titik apungan perpuluhan :

    • Kumpulan digit perpuluhan (0-9), secara opsional mengandungi titik perpuluhan (.).
      Contohnya: 13.170, -5.63, dll.

    • Bahagian eksponen pilihan (e atau E) diikuti dengan tanda + atau - pilihan dan urutan digit perpuluhan yang tidak kosong.
      Contohnya: 3.46101e + 007, 13.19e-013, dll.

  • Untuk nilai titik terapung heksadesimal :

    • Rentetan yang bermula dengan 0x atau 0X, diikuti oleh urutan digit heksadesimal yang tidak kosong, yang opsional mengandungi titik perpuluhan (.).
      Contohnya: 0xfa5, -0xb1f.24, dll.

    • Bahagian eksponen pilihan (p atau P) diikuti dengan tanda + atau - pilihan dan urutan digit heksadesimal kosong.
      Contohnya: 0x51c.23p5, -0x2a.3p-3, dll.

  • Infiniti :

    • INF atau INFINITY (mengabaikan kes).
      Contohnya: -Inf, InfiNiTy, dll.

  • NaN (Bukan Nombor) :

    • NAN atau NAN Laluan (mengabaikan kes) di mana urutan adalah urutan watak yang hanya terdiri daripada watak alfanumerik atau garis bawah (_). Hasilnya adalah NaN yang tenang.
      Contohnya: Nan, NaNab1, dll.

Contoh 3: Bagaimana strtod () berfungsi dengan eksponen dan heksadesimal?

 #include #include #include using namespace std; int main() ( // initialize a exponential value char numberString() = "-44.01e-3End String"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl << endl; // initialize a new hexadecimal value strcpy(numberString,"0xf1bc.51hello"); number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Semasa anda menjalankan program, outputnya adalah:

 Number in String = -44.01e-3End String Number in Double = -0.04401 End String = End String Number in String = 0xf1bc.51hello Number in Double = 61884.3 End String = hello

Example 4: strtod Cases for INFINITY and NaN

 #include #include using namespace std; int main() ( char *end; cout << "INFINITY" << " to Double = " << strtod("INFINITY", &end) << endl; cout << "End String = " << end << endl << endl; cout << "Infabc" << " to Double = " << strtod("Infabc", &end) << endl; cout << "End String = " << end << endl << endl; cout << "NaN12a" << " to Double = " << strtod("NaN12a", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

When you run the program, the output will be:

 INFINITY to Double = inf End String = Infabc to Double = inf End String = abc NaN12a to Double = nan End String = 12a

In general, a valid floating point argument for strtod() function has the following form:

(whitespace) (- | +) (digits) (.digits) ( (e | E )(- | +)digits)

The strtod() function ignores all the leading whitespace characters until the primary non-whitespace character is found.

Kemudian, bermula dari watak ini, diperlukan sebanyak mungkin watak yang membentuk perwakilan titik apungan yang sah dan mengubahnya menjadi nilai titik terapung. Apa sahaja yang tersisa dari rentetan setelah aksara terakhir yang sah disimpan di dalam objek yang ditunjuk pada akhir.

Contoh 5: fungsi strtod () dengan ruang kosong terkemuka

 #include #include using namespace std; int main() ( char *end; cout << "25.5" << " to Double = " << strtod(" 25.5", &end) << endl; // end pointer is set to null cout << "End String = " << end << endl << endl; // Returns 0 because of invalid conversion cout << "abc11.20" << " to Double = " << strtod("abc11.20", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Semasa anda menjalankan program, outputnya adalah:

 25.5 hingga Double = 25.5 String Akhir = abc11.20 hingga Double = 0 String Akhir = abc11.20

Artikel menarik...