std::stod
是 C++ 標準庫中的一個函數,用于將字符串轉換為 double
類型的浮點數
std::stod
會拋出 std::invalid_argument
異常。你可以使用 std::istringstream
和 std::stod
的異常處理機制來捕獲這個異常。#include <iostream>
#include <sstream>
#include <string>
#include <stdexcept>
int main() {
std::string input = "abc"; // 無效的浮點數表示
std::istringstream iss(input);
try {
double value = std::stod(iss);
std::cout << "轉換成功: " << value << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "捕獲到無效參數異常: " << e.what() << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << "捕獲到超出范圍異常: " << e.what() << std::endl;
}
return 0;
}
在這個示例中,我們嘗試將一個無效的浮點數字符串 “abc” 轉換為 double
類型。由于輸入字符串無效,std::stod
會拋出 std::invalid_argument
異常,我們通過捕獲這個異常來處理錯誤。
std::stod
還可能拋出 std::out_of_range
異常,表示轉換后的浮點數超出了 double
類型的表示范圍。你可以使用類似的方法捕獲這個異常。#include <iostream>
#include <sstream>
#include <string>
#include <stdexcept>
int main() {
std::string input = "1e309"; // 超出 double 范圍的值
std::istringstream iss(input);
try {
double value = std::stod(iss);
std::cout << "轉換成功: " << value << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "捕獲到無效參數異常: " << e.what() << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << "捕獲到超出范圍異常: " << e.what() << std::endl;
}
return 0;
}
在這個示例中,我們嘗試將一個超出 double
范圍的大數 “1e309” 轉換為 double
類型。由于輸入值超出了范圍,std::stod
會拋出 std::out_of_range
異常,我們通過捕獲這個異常來處理錯誤。