C++ 標準庫提供 <sstream> 中的 istringstream 與 ostringstream,可安全、靈活地實現 std::string 與 double 的雙向轉換,避免 atof / sprintf 的緩衝區風險。
#include
#include
#include
std::string s = "23.45";
double d;
std::istringstream is(s);
is >> d;
std::cout << d << std::endl; // 輸出 23.45
原理:將字串建立輸入串流,再用 operator>> 提取為 double。若字串格式無效,d 維持 0 且串流進入失敗狀態,建議轉換後檢查 is.fail()。
double d = 45.67;
std::string s;
std::ostringstream os;
os << d;
s = os.str();
std::cout << s << std::endl; // 輸出 "45.67"
原理:建立輸出串流,寫入 double,再取得內部字串。可結合 std::fixed、std::setprecision 控制輸出格式。
double strToDouble(const std::string& str) {
std::istringstream iss(str);
double val;
iss >> val;
if (iss.fail()) throw std::invalid_argument("Invalid number format");
return val;
}
std::string doubleToStr(double val, int precision = 6) {
std::ostringstream oss;
oss << std::fixed << std::setprecision(precision) << val;
return oss.str();
}
串流轉換類型安全、可擴充(支援自訂型別)、易於格式控制,是 C++ 進行字串與數值互轉的推薦做法。