std::stof, std::stod, std::stold

出自cppreference.com
 
 
 
std::basic_string
 
在標頭 <string> 定義
float       stof ( const std::string& str, std::size_t* pos = nullptr );
(1) (C++11 起)
float       stof ( const std::wstring& str, std::size_t* pos = nullptr );
(2) (C++11 起)
double      stod ( const std::string& str, std::size_t* pos = nullptr );
(3) (C++11 起)
double      stod ( const std::wstring& str, std::size_t* pos = nullptr );
(4) (C++11 起)
long double stold( const std::string& str, std::size_t* pos = nullptr );
(5) (C++11 起)
long double stold( const std::wstring& str, std::size_t* pos = nullptr );
(6) (C++11 起)

轉譯字符串 str 中的浮點數。

ptr 為(提供給轉換函數的)一個類型是 char* (1,3,5)wchar_t* (2,4,6) 的內部指針:

1) 調用 std::strtof(str.c_str(), &ptr)
2) 調用 std::wcstof(str.c_str(), &ptr)
3) 調用 std::strtod(str.c_str(), &ptr)
4) 調用 std::wcstod(str.c_str(), &ptr)
5) 調用 std::strtold(str.c_str(), &ptr)
6) 調用 std::wcstold(str.c_str(), &ptr)

函數會捨棄任何空白符(由 std::isspace() 確定),直至找到首個非空白符。然後它會取用儘可能多的字符,以構成合法的浮點數表示,並將它們轉換成浮點值。合法的浮點值可以為下列之一:

  • 十進制浮點數表達式。它由下列部分組成:
  • (可選) 正或負號
  • 非空的十進制數字序列,可選地包含一個小數點字符(由當前的 C 本地環境確定)(定義有效數字)
  • (可選) eE,並跟隨可選的正或負號,以及非空十進制數字序列(以 10 為底定義指數)
  • 十六進制浮點數表達式。它由下列部分組成:
  • (可選) 正或負號
  • 0x0X
  • 非空的十六進制數字序列,選地包含一個小數點字符(由當前的 C 本地環境確定)(定義有效數字)
  • (可選) pP,並跟隨可選的正或負號,以及非空十進制數字序列(以 2 為底定義指數)
  • 無窮大表達式。它由下列部分組成:
  • (可選) 正或負號
  • INFINFINITY,忽略大小寫
  • 非數(NaN)表達式。它由下列部分組成:
  • (可選) 正或負號
  • NANNAN(char_sequence ),忽略 NAN 部分的大小寫。 char_sequence 只能由數字、拉丁字母和下劃線構成。結果是一個靜態的 NaN 浮點值。
  • 任何其他可由當前 C 本地環境接受的表達式。

如果 pos 不是空指針,那麼 ptr 將接受 str.c_str() 中首個未轉換字符的地址,然後計算該字符的下標並將它存儲到 *pos,給出轉換處理的字符數。

參數

str - 要轉換的字符串
pos - 存儲已處理字符數的整數的地址

返回值

轉換為指定浮點數類型的字符串。

異常

無法進行轉換時會拋出 std::invalid_argument

轉換值會落在結果類型的範圍外,或底層函數(即 std::strtofstd::strtodstd::strtold)將 errno 設置為 ERANGE 時會拋出 std::out_of_range

示例

缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 出版時的行為 正確行為
LWG 2009 C++11 在轉換值會落在結果類型的範圍外時不會拋出 std::out_of_range 會拋出
LWG 2403 C++11 stof 會調用 std::strtodstd::wcstod stof 會調用 std::strtofstd::wcstof

參閱

(C++11)(C++11)(C++11)
轉換字符串為有符號整數
(函數) [編輯]
(C++11)(C++11)
轉換字符串為無符號整數
(函數) [編輯]
轉換字符序列到整數或浮點數
(函數) [編輯]