std::stof, std::stod, std::stold
來自 cppreference.com
< cpp | string | 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 區域設定 確定)(定義有效數)
- (可選)
e
或E
,後跟可選的減號或加號以及非空十進位制數字序列(定義以 10 為底的指數)
- 十六進位制浮點表示式。它由以下部分組成:
- (可選) 加號或減號
-
0x
或0X
- 非空十六進位制數字序列,可選地包含小數點字元(由當前的 C 區域設定 確定)(定義有效數)
- (可選)
p
或P
,後跟可選的減號或加號以及非空十進位制數字序列(定義以 2 為底的指數)
- 無窮大表達式。它由以下部分組成:
- (可選) 加號或減號
-
INF
或INFINITY
,不區分大小寫
- 非數字表達式。它由以下部分組成:
- (可選) 加號或減號
-
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) |
將字元序列轉換為整數或浮點值 (函式) |