Difference between revisions of "cpp/string/basic string/stof"
(Created page with "{{cpp/title| stof | stod | stold}} {{cpp/string/sidebar}} {{ddcl list begin}} {{ddcl list header | string}} {{ddcl list item | num=1 | notes={{mark c++0x feature}} | float stof( ...") |
(Added LWG issue #2009 DR (part 3/3).) |
||
(38 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
− | {{cpp/title| stof | stod | stold}} | + | {{cpp/title|stof|stod|stold}} |
− | {{cpp/string/ | + | {{cpp/string/basic_string/navbar}} |
− | {{ | + | {{dcl begin}} |
− | {{ | + | {{dcl header|string}} |
− | {{ | + | {{dcl|num=1|since=c++11|1= |
− | float stof( const std::string& str, size_t * | + | float stof ( const std::string& str, std::size_t* pos = nullptr ); |
}} | }} | ||
− | {{ | + | {{dcl|num=2|since=c++11|1= |
− | + | float stof ( const std::wstring& str, std::size_t* pos = nullptr ); | |
}} | }} | ||
− | {{ | + | {{dcl|num=3|since=c++11|1= |
− | + | double stod ( const std::string& str, std::size_t* pos = nullptr ); | |
}} | }} | ||
− | {{ | + | {{dcl|num=4|since=c++11|1= |
+ | double stod ( const std::wstring& str, std::size_t* pos = nullptr ); | ||
+ | }} | ||
+ | {{dcl|num=5|since=c++11|1= | ||
+ | long double stold( const std::string& str, std::size_t* pos = nullptr ); | ||
+ | }} | ||
+ | {{dcl|num=6|since=c++11|1= | ||
+ | long double stold( const std::wstring& str, std::size_t* pos = nullptr ); | ||
+ | }} | ||
+ | {{dcl end}} | ||
− | {{ | + | Interprets a floating point value in a string {{c|str}}. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | {{ | + | Let {{c|ptr}} be an internal (to the conversion functions) pointer of type {{c/core|char*}} {{v|1,3,5}} or {{c/core|wchar_t*}} {{v|2,4,6}}, accordingly. |
+ | |||
+ | @1@ Calls {{c|std::strtof(str.c_str(), &ptr)}}. | ||
+ | @2@ Calls {{c|std::wcstof(str.c_str(), &ptr)}}. | ||
+ | @3@ Calls {{c|std::strtod(str.c_str(), &ptr)}}. | ||
+ | @4@ Calls {{c|std::wcstod(str.c_str(), &ptr)}}. | ||
+ | @5@ Calls {{c|std::strtold(str.c_str(), &ptr)}}. | ||
+ | @6@ Calls {{c|std::wcstold(str.c_str(), &ptr)}}. | ||
+ | |||
+ | {{cpp/string/cvt str2float}} | ||
+ | |||
+ | If {{c|pos}} is not a null pointer, then {{c|ptr}} will receive the address of the first unconverted character in {{c|str.c_str()}}, and the index of that character will be calculated and stored in {{c|*pos}}, giving the number of characters that were processed by the conversion. | ||
+ | |||
+ | ===Parameters=== | ||
+ | {{par begin}} | ||
+ | {{par|str|the string to convert}} | ||
+ | {{par|pos|address of an integer to store the number of characters processed}} | ||
+ | {{par end}} | ||
+ | |||
+ | ===Return value=== | ||
The string converted to the specified floating point type. | The string converted to the specified floating point type. | ||
+ | |||
+ | ===Exceptions=== | ||
+ | {{lc|std::invalid_argument}} if no conversion could be performed. | ||
+ | |||
+ | {{lc|std::out_of_range}} if the converted value would fall out of the range of the result type or if the underlying function ({{lc|std::strtof}}, {{lc|std::strtod}} or {{lc|std::strtold}}) sets {{lc|errno}} to {{lc|ERANGE}}. | ||
+ | |||
+ | ===Example=== | ||
+ | {{example}} | ||
+ | |||
+ | ===Defect reports=== | ||
+ | {{dr list begin}} | ||
+ | {{dr list item|wg=lwg|dr=2009|std=C++11|before={{lc|std::out_of_range}} would not be thrown if the converted<br>value would fall out of the range of the result type|after=will throw}} | ||
+ | {{dr list item|wg=lwg|dr=2403|std=C++11|before={{tt|stof}} called {{lc|std::strtod}} or {{lc|std::wcstod}}|after={{tt|stof}} calls {{lc|std::strtof}} or {{lc|std::wcstof}}}} | ||
+ | {{dr list end}} | ||
+ | |||
+ | ===See also=== | ||
+ | {{dsc begin}} | ||
+ | {{dsc inc|cpp/string/basic_string/dsc stol}} | ||
+ | {{dsc inc|cpp/string/basic_string/dsc stoul}} | ||
+ | {{dsc inc|cpp/utility/dsc from_chars}} | ||
+ | {{dsc end}} | ||
+ | |||
+ | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} |
Latest revision as of 19:31, 7 August 2023
Defined in header <string>
|
||
float stof ( const std::string& str, std::size_t* pos = nullptr ); |
(1) | (since C++11) |
float stof ( const std::wstring& str, std::size_t* pos = nullptr ); |
(2) | (since C++11) |
double stod ( const std::string& str, std::size_t* pos = nullptr ); |
(3) | (since C++11) |
double stod ( const std::wstring& str, std::size_t* pos = nullptr ); |
(4) | (since C++11) |
long double stold( const std::string& str, std::size_t* pos = nullptr ); |
(5) | (since C++11) |
long double stold( const std::wstring& str, std::size_t* pos = nullptr ); |
(6) | (since C++11) |
Interprets a floating point value in a string str.
Let ptr be an internal (to the conversion functions) pointer of type char* (1,3,5) or wchar_t* (2,4,6), accordingly.
Function discards any whitespace characters (as determined by std::isspace) until first non-whitespace character is found. Then it takes as many characters as possible to form a valid floating-point representation and converts them to a floating-point value. The valid floating-point value can be one of the following:
- decimal floating-point expression. It consists of the following parts:
- (optional) plus or minus sign
- nonempty sequence of decimal digits optionally containing decimal-point character (as determined by the current C locale) (defines significand)
- (optional)
e
orE
followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent to base 10)
- hexadecimal floating-point expression. It consists of the following parts:
- (optional) plus or minus sign
-
0x
or0X
- nonempty sequence of hexadecimal digits optionally containing a decimal-point character (as determined by the current C locale) (defines significand)
- (optional)
p
orP
followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent to base 2)
- infinity expression. It consists of the following parts:
- (optional) plus or minus sign
-
INF
orINFINITY
ignoring case
- not-a-number expression. It consists of the following parts:
- (optional) plus or minus sign
-
NAN
orNAN(
char_sequence)
ignoring case of theNAN
part. char_sequence can only contain digits, Latin letters, and underscores. The result is a quiet NaN floating-point value.
- any other expression that may be accepted by the currently installed C locale
If pos is not a null pointer, then ptr will receive the address of the first unconverted character in str.c_str(), and the index of that character will be calculated and stored in *pos, giving the number of characters that were processed by the conversion.
Contents |
[edit] Parameters
str | - | the string to convert |
pos | - | address of an integer to store the number of characters processed |
[edit] Return value
The string converted to the specified floating point type.
[edit] Exceptions
std::invalid_argument if no conversion could be performed.
std::out_of_range if the converted value would fall out of the range of the result type or if the underlying function (std::strtof, std::strtod or std::strtold) sets errno to ERANGE.
[edit] Example
This section is incomplete Reason: no example |
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2009 | C++11 | std::out_of_range would not be thrown if the converted value would fall out of the range of the result type |
will throw |
LWG 2403 | C++11 | stof called std::strtod or std::wcstod
|
stof calls std::strtof or std::wcstof
|
[edit] See also
(C++11)(C++11)(C++11) |
converts a string to a signed integer (function) |
(C++11)(C++11) |
converts a string to an unsigned integer (function) |
(C++17) |
converts a character sequence to an integer or floating-point value (function) |