C++ <cstdlib> - strtof() Function
The C++ <cstdlib> strtof() function is used to interpret a floating-point value in a byte string pointed to by str.
The function first discards any whitespace characters (as determined by isspace()) until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by 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 for this function using the "C" locale is formed by an optional sign character (+ or -), followed by one of:
- A sequence of digits, optionally containing a decimal-point character (.), optionally followed by an exponent part (an e or E character followed by an optional sign and a sequence of digits).
- A 0x or 0X prefix, then a sequence of hexadecimal digits (as in isxdigit()) optionally containing a period which separates the whole and fractional number parts. Optionally followed by a power of 2 exponent (a p or P character followed by an optional sign and a sequence of hexadecimal digits).
- INF or INFINITY (ignoring case).
- NAN or NANsequence (ignoring case), where sequence is a sequence of characters, where each character is either an alphanumeric character (as in isalnum) or the underscore character (_).
If str_end is not a null pointer, the function also sets the value of str_end to point to the first character after the number. If str_end is a null pointer, it is ignored.
If the first sequence of non-whitespace characters in str is not a valid floating-point number, or if no such sequence exists (because either empty or contains only whitespaces), no conversion is performed and zero is returned.
Syntax
float strtof (const char* str, char** str_end);
Parameters
str |
Specify pointer to the null-terminated byte string to be interpreted. |
str_end |
Specify pointer to a pointer to character. |
Return Value
On success, the function returns the converted floating-point number as a value of type float. If no conversion can be performed, 0.0 is returned. If the converted value falls out of the range, a positive or negative HUGE_VAL is returned, and errno is set to ERANGE.
Example 1:
The example below shows the usage of <cstdlib> strtof() function.
#include <cstdio> #include <cstdlib> int main (){ char str1[] = "123"; char str2[] = "10.55"; char str3[] = "100 some words"; char str4[] = "some words 555"; char str5[] = "inF"; char str6[] = "Nan(2)"; char *end; float num1 = strtof(str1, &end); float num2 = strtof(str2, &end); float num3 = strtof(str3, &end); float num4 = strtof(str4, NULL); float num5 = strtof(str5, NULL); float num6 = strtof(str6, NULL); //displaying the result printf("strtof(\"%s\") = %.2f\n", str1, num1); printf("strtof(\"%s\") = %.2f\n", str2, num2); printf("strtof(\"%s\") = %.2f\n", str3, num3); printf("strtof(\"%s\") = %.2f\n", str4, num4); printf("strtof(\"%s\") = %.2f\n", str5, num5); printf("strtof(\"%s\") = %.2f\n", str6, num6); return 0; }
The output of the above code will be:
strtof("123") = 123.00 strtof("10.55") = 10.55 strtof("100 some words") = 100.00 strtof("some words 555") = 0.00 strtof("inF") = inf strtof("Nan(2)") = nan
Example 2:
Consider one more example where the string contains multiple floating-point values. The second parameter if not a null pointer then this function sets this parameter to value which points to the first character after the interpreted number. This feature can be used to interpret multiple floating-point values from the string.
#include <cstdio> #include <cstdlib> int main (){ char str[] = "123 10.55 555.89"; char *pEnd; float val1 = strtof(str, &pEnd); float val2 = strtof(pEnd, &pEnd); float val3 = strtof(pEnd, &pEnd); //displaying the result printf("val1 = %.2f\n", val1); printf("val2 = %.2f\n", val2); printf("val3 = %.2f\n", val3); return 0; }
The output of the above code will be:
val1 = 123.00 val2 = 10.55 val3 = 555.89
❮ C++ <cstdlib> Library