C ++ strtod () - Thư viện chuẩn C ++

Hàm strtod () 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.

Hàm này cũng đặt một con trỏ trỏ đến ký tự đầu tiên sau ký tự hợp lệ cuối cùng của chuỗi nếu có, nếu không thì con trỏ được đặt thành null.

Đối với cơ số 10 và chuỗi "12abc"

Phần số hợp lệ -> 12

Ký tự đầu tiên sau phần số hợp lệ -> a

Nó được định nghĩa trong tệp tiêu đề.

nguyên mẫu strtod ()

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

Hàm strtod () nhận chuỗi và một con trỏ tới ký tự làm tham số của nó, diễn giải nội dung của chuỗi dưới dạng floatsố và trả về một doublegiá trị.

tham số strtod ()

  • str : Một chuỗi có biểu diễn một số dấu phẩy động.
  • end : Tham chiếu đến một đối tượng đã được cấp phát kiểu char *. Giá trị của end được hàm đặt thành ký tự tiếp theo trong str sau ký tự hợp lệ cuối cùng. Tham số này cũng có thể là một con trỏ null, trong trường hợp đó nó không được sử dụng.

strtod () Giá trị trả về

Hàm strtod () 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, lỗi phạm vi sẽ xảy ra và trả về HUGE_VAL dương hoặc âm.

Ví dụ 1: Hàm strtod () hoạt động như thế nào?

 #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; ) 

Khi bạn chạy chương trình, đầu ra sẽ là:

 Số trong chuỗi cuối = 12,44b 0xy Số trong chuỗi kép = 12,44 chuỗi = b 0xy

Ví dụ 2: Hàm strtod () không có ký tự ở cuối

 #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; ) 

Khi bạn chạy chương trình, đầu ra sẽ là:

 Số trong chuỗi kết thúc = 12,44b Số 0xy trong đôi = 12,44 Con trỏ rỗng

Giá trị dấu phẩy động hợp lệ cho hàm strtod () 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ụ: 13.170, -5.63, v.v.

    • Một phần lũy thừa tùy chọn (e hoặc E) 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ụ: 3.46101e + 007, 13.19e-013, 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ặc 0X, 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ụ: 0xfa5, -0xb1f.24, v.v.

    • Một phần lũy thừa tùy chọn (p hoặc P) theo sau là một dấu + hoặc - tùy chọn và dãy chữ số thập lục phân không trống.
      Ví dụ: 0x51c.23p5, -0x2a.3p-3, v.v.

  • Vô cực :

    • INF hoặc INFINITY (bỏ qua trường hợp).
      Ví dụ: -Inf, InfiNiTy, v.v.

  • NaN (Không phải số) :

    • NAN hoặc NANsequence (bỏ qua chữ hoa chữ thường) trong đó chuỗi là một chuỗi các 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, NaNab1, v.v.

Ví dụ 3: Strtod () hoạt động như thế nào với số mũ và số thập lục phân?

 #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; ) 

Khi bạn chạy chương trình, đầu ra sẽ là:

 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

Ví dụ 4: Các trường hợp strtod cho INFINITY và 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; ) 

Khi bạn chạy chương trình, đầu ra sẽ là:

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

Nói chung, đối số dấu phẩy động hợp lệ cho hàm strtod () có dạng sau:

(khoảng trắng) (- | +) (chữ số) (.digits) ((e | E) (- | +) chữ số)

Hàm strtod () 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 khi ký tự hợp lệ cuối cùng được lưu trữ trong đối tượng được trỏ tới cuối.

Ví dụ 5: Hàm strtod () với khoảng trắng ở đầu

 #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; ) 

Khi bạn chạy chương trình, đầu ra sẽ là:

 25,5 đến Double = 25,5 End String = abc11,20 to Double = 0 End String = abc11,20

thú vị bài viết...