std::stof, std::stod, std::stold
出自cppreference.com
| 在標頭 <string> 定義
|
||
| |
(1) | (C++11 起) |
| |
(2) | (C++11 起) |
| |
(3) | (C++11 起) |
| |
(4) | (C++11 起) |
| |
(5) | (C++11 起) |
| |
(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 本地環境確定)(定義有效數字)
- (可選)
e或E,並跟隨可選的正或負號,以及非空十進制數字序列(以 10 為底定義指數)
- 十六進制浮點數表達式。它由下列部分組成:
- (可選) 正或負號
0x或0X- 非空的十六進制數字序列,選地包含一個小數點字符(由當前的 C 本地環境確定)(定義有效數字)
- (可選)
p或P,並跟隨可選的正或負號,以及非空十進制數字序列(以 2 為底定義指數)
- 無窮大表達式。它由下列部分組成:
- (可選) 正或負號
INF或INFINITY,忽略大小寫
- 非數(NaN)表達式。它由下列部分組成:
- (可選) 正或負號
NAN或NAN(char_sequence ),忽略NAN部分的大小寫。 char_sequence 只能由數字、拉丁字母和下劃線構成。結果是一個靜態的 NaN 浮點值。
- 任何其他可由當前 C 本地環境接受的表達式。
如果 pos 不是空指針,那麼 ptr 將接受 str.c_str() 中首個未轉換字符的地址,然後計算該字符的下標並將它存儲到 *pos,給出轉換處理的字符數。
參數
| str | - | 要轉換的字符串 |
| pos | - | 存儲已處理字符數的整數的地址 |
返回值
轉換為指定浮點數類型的字符串。
異常
無法進行轉換時會拋出 std::invalid_argument。
轉換值會落在結果類型的範圍外,或底層函數(即 std::strtof、std::strtod 或 std::strtold)將 errno 設置為 ERANGE 時會拋出 std::out_of_range。
示例
| 本節未完成 原因:暫無示例 |
缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
| 缺陷報告 | 應用於 | 出版時的行為 | 正確行為 |
|---|---|---|---|
| LWG 2009 | C++11 | 在轉換值會落在結果類型的範圍外時不會拋出 std::out_of_range | 會拋出 |
| LWG 2403 | C++11 | stof 會調用 std::strtod 或 std::wcstod
|
stof 會調用 std::strtof 或 std::wcstof
|
參閱
(C++11)(C++11)(C++11) |
轉換字符串為有符號整數 (函數) |
(C++11)(C++11) |
轉換字符串為無符號整數 (函數) |
(C++17) |
轉換字符序列到整數或浮點數 (函數) |