Fungsi atof () di C ++ mengartikan konten string sebagai angka floating point dan mengembalikan nilainya sebagai double.
atof () prototipe
atof ganda (const char * str);
Ini didefinisikan dalam file header.
atof () Parameter
- str - Sebuah string yang memiliki representasi dari bilangan floating point.
atof () Nilai kembali
Fungsi atof () mengembalikan:
- nilai ganda (yang diubah dari string).
- 0,0 jika tidak ada konversi valid yang dapat dilakukan.
Jika nilai yang dikonversi berada di luar rentang, hal itu menyebabkan perilaku tidak ditentukan.
Contoh 1: Bagaimana fungsi atof () bekerja?
#include #include using namespace std; int main() ( char numberString() = "-32.40"; double numberInDouble; cout << "Number in String = " << numberString << endl; numberInDouble = atof(numberString); cout << "Number in Double = " << numberInDouble; return 0; )
Saat Anda menjalankan program, hasilnya adalah:
Angka dalam String = -32,40 Angka dalam Ganda = -32,4
Nilai floating-point yang valid untuk fungsi atof () terdiri dari tanda + atau - opsional yang diikuti oleh salah satu set berikut:
- Untuk nilai floating-point desimal:
- Sekelompok digit desimal (0-9) , secara opsional berisi titik desimal (.). Misalnya: 9.056, -0.013, dll.
- Bagian eksponen opsional (
e
atauE
) diikuti dengan tanda + atau - opsional dan urutan digit desimal yang tidak kosong. Misalnya: 1.23455e + 009, 5.23e-018, dll.
- Untuk nilai floating-point heksadesimal:
- String yang dimulai dengan
0x
atau0X
, diikuti dengan urutan digit heksadesimal yang tidak kosong, secara opsional berisi titik desimal (.). Misalnya: 0xf1b, -0xb1b.51, dll. - Bagian eksponen opsional (
p
atauP
) diikuti dengan tanda + atau - opsional dan urutan digit heksadesimal yang tidak kosong. Misalnya: 0x51c.23p5, -0x2a.3p-3, dll.
- String yang dimulai dengan
- Infinity:
INF
atauINFINITY
(mengabaikan kasus). Misalnya: -iNf, INfINiTy, dll.
- NaN (Bukan Angka):
NAN
atauNANsequence
(kasus diabaikan) di mana sequence adalah urutan karakter yang hanya terdiri dari karakter alfanumerik atau garis bawah (_). Hasilnya adalah NaN yang tenang. Misalnya: Nan, NaN12, dll.
Contoh 2: Bagaimana atof () bekerja dengan eksponen dan heksadesimal?
#include #include using namespace std; int main() ( cout << "-44.01e-3" << " to Double = " << atof("-44.01e-0") << endl; cout << "-44.01e-3" << " to Double = " << atof("-44.01e-3") << endl; cout << "0xf1bc" << " to Double = " << atof("0xf1bc") << endl; cout << "0xf1bc.51" << " to Double = " << atof("0xf1bc.51") << endl; return 0; )
Saat Anda menjalankan program, hasilnya adalah:
-44.01e-3 menjadi Double = -44.01 -44.01e-3 menjadi Double = -0.04401 0xf1bc menjadi Double = 61884 0xf1bc.51 menjadi Double = 61884.3
Contoh 3: atof Kasus INFINITY dan NaN
#include #include using namespace std; int main() ( cout << "INFINITY" << " to Double = " << atof("INFINITY") << endl; cout << "Inf" << " to Double = " << atof("Inf") << endl; cout << "Nan" << " to Double = " << atof("Nan") << endl; cout << "NAN" << " to Double = " << atof("NAN") << endl; return 0; )
Saat Anda menjalankan program, hasilnya adalah:
INFINITY ke Double = inf Inf ke Double = inf Nan ke Double = nan NAN ke Double = nan
Secara umum, argumen floating point yang valid untuk fungsi atof () memiliki bentuk berikut:
(spasi) (- | +) (digit) (.digits) ((e | E) (- | +) digit)
Fungsi atof () mengabaikan semua karakter spasi putih sebelum karakter non-spasi putih utama ditemukan.
Kemudian, dimulai dari karakter ini, dibutuhkan karakter sebanyak mungkin yang membentuk representasi floating-point yang valid dan mengubahnya menjadi nilai floating-point. Apa pun yang tersisa dari string setelah karakter valid terakhir diabaikan dan tidak berpengaruh pada hasil.
Contoh 4: fungsi atof () dengan spasi dan karakter tambahan
#include #include using namespace std; int main() ( cout << "25.5" << " to Double = " << atof(" 25.5") << endl; cout << "25.5 " << " to Double = " << atof(" 25.5 ") << endl; cout << "25.5abcd" << " to Double = " << atof("25.5abcd") << endl; // Returns 0 because of invalid conversion cout << "abcd25.5" << " to Double = " << atof("abcd25.5") << endl; // Rules for whitespace and trailing character also apply for infinity and Nan cout << "INFINITYabcd" << " to Double = " << atof("INFINITYabcd") << endl; cout << "INFINITY" << " to Double = " << atof(" INFINITY") << endl; cout << "Nanlll" << " to Double = " << atof("Nanlll") << endl; return 0; )
Saat Anda menjalankan program, hasilnya adalah:
25.5 menjadi Double = 25.5 25.5 menjadi Double = 25.5 25.5abcd menjadi Double = 25.5 abcd25.5 menjadi Double = 0 INFINITYabcd ke Double = inf INFINITY ke Double = inf Nanlll ke Double = nan