Hàm atof () trong C ++ diễn giải nội dung của một chuỗi dưới dạng số dấu phẩy động và trả về giá trị của nó dưới dạng kép.
nguyên mẫu atof ()
đôi atof (const char * str);
Nó được định nghĩa trong tệp tiêu đề.
tham số atof ()
- str - Một chuỗi có biểu diễn của một số dấu phẩy động.
atof () Giá trị trả về
Hàm atof () trả về:
- một giá trị kép (được chuyển đổi từ chuỗi).
- 0,0 nếu không có chuyển đổi hợp lệ nào có thể được thực hiện.
Nếu giá trị được chuyển đổi nằm ngoài phạm vi, nó gây ra hành vi không xác định.
Ví dụ 1: Hàm atof () hoạt động như thế nào?
#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; )
Khi bạn chạy chương trình, đầu ra sẽ là:
Số trong chuỗi = -32,40 Số trong đôi = -32,4
Giá trị dấu phẩy động hợp lệ cho hàm atof () bao gồm dấu + hoặc - tùy chọn theo sau là một trong các bộ sau:
- Đối với giá trị dấu phẩy động thập phân:
- Một nhóm các chữ số thập phân (0-9) , tùy chọn có chứa một dấu thập phân (.). Ví dụ: 9.056, -0.013, v.v.
- Một phần lũy thừa tùy chọn (
e
hoặcE
) theo sau bởi một dấu + hoặc - tùy chọn và dãy chữ số thập phân không trống. Ví dụ: 1.23455e + 009, 5.23e-018, v.v.
- Đối với giá trị dấu phẩy động thập lục phân:
- Một chuỗi bắt đầu bằng
0x
hoặc0X
, theo sau là một chuỗi các chữ số thập lục phân không rỗng, có tùy chọn chứa dấu thập phân (.). Ví dụ: 0xf1b, -0xb1b.51, v.v. - Một phần lũy thừa tùy chọn (
p
hoặcP
) theo sau bởi một dấu + hoặc - tùy chọn và chuỗi các chữ số thập lục phân không trống. Ví dụ: 0x51c.23p5, -0x2a.3p-3, v.v.
- Một chuỗi bắt đầu bằng
- Vô cực:
INF
hoặcINFINITY
(bỏ qua trường hợp). Ví dụ: -iNf, INfINiTy, v.v.
- NaN (Không phải số):
NAN
hoặcNANsequence
(bỏ qua chữ hoa chữ thường) trong đó trình tự là một chuỗi ký tự chỉ bao gồm các ký tự chữ và số hoặc dấu gạch dưới (_). Kết quả là NaN yên tĩnh. Ví dụ: Nan, NaN12, v.v.
Ví dụ 2: Làm thế nào atof () hoạt động với số mũ và số thập lục phân?
#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; )
Khi bạn chạy chương trình, đầu ra sẽ là:
-44.01e-3 thành Double = -44.01 -44.01e-3 to Double = -0.04401 0xf1bc to Double = 61884 0xf1bc.51 to Double = 61884.3
Ví dụ 3: Các trường hợp chung cho INFINITY và 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; )
Khi bạn chạy chương trình, đầu ra sẽ là:
INFINITY thành Double = inf Inf thành Double = inf Nan thành Double = nan NAN thành Double = nan
Nói chung, đối số dấu phẩy động hợp lệ cho hàm atof () có dạng sau:
(khoảng trắng) (- | +) (chữ số) (.digits) ((e | E) (- | +) chữ số)
Hàm atof () bỏ qua tất cả các ký tự khoảng trắng hàng đầu cho đến khi tìm thấy ký tự không phải khoảng trắng chính.
Sau đó, bắt đầu từ ký tự này, cần nhiều ký tự nhất có thể để tạo thành biểu diễn dấu phẩy động hợp lệ và chuyển đổi chúng thành giá trị dấu phẩy động. Bất cứ thứ gì còn lại của chuỗi sau ký tự hợp lệ cuối cùng sẽ bị bỏ qua và không ảnh hưởng đến kết quả.
Ví dụ 4: Hàm atof () với Khoảng trắng và các ký tự ở cuối
#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; )
Khi bạn chạy chương trình, đầu ra sẽ là:
25,5 thành Double = 25,5 25,5 thành Double = 25,5 25,5abcd thành Double = 25,5 abcd25,5 thành Double = 0 INFINITYabcd thành Double = inf INFINITY thành Double = inf Nanlll thành Double = nan