Функция wcstof () в C ++ интерпретирует содержимое широкой строки как число с плавающей запятой и возвращает его значение как число с плавающей запятой.
Эта функция также устанавливает указатель так, чтобы он указывал на первый широкий символ после последнего действительного символа широкой строки, если таковой имеется, в противном случае указатель устанавливается в нуль.
Это определено в заголовочном файле.
прототип wcstof ()
float wcstof (const wchar_t * str, wchar_t ** str_end);
Функция wcstof () принимает в качестве параметра широкую строку и указатель на широкий символ, интерпретирует содержимое широкой строки как число с плавающей запятой и возвращает значение с плавающей запятой.
Параметры wcstof ()
- str: широкая строка, представляющая число с плавающей запятой.
- str_end: указатель на указатель на широкий символ. Значение str_end устанавливается функцией на следующий символ в str после последнего допустимого символа. Этот параметр также может быть нулевым указателем.
wcstof () Возвращаемое значение
Функция wcstof () возвращает:
- значение с плавающей запятой (преобразованное из широкой строки).
- 0.0, если не удалось выполнить действительное преобразование.
Если преобразованное значение выходит за пределы диапазона, возникает ошибка диапазона и возвращается положительное или отрицательное значение HUGE_VAL .
Пример 1: Как работает функция wcstof ()?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"40.001u220fc12"; wchar_t *end; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Когда вы запустите программу, вывод будет:
Широкая строка = 40,001∏c12 Значение с плавающей запятой = 40,001 Конечная строка = ∏c12
Пример 2: функция wcstof () без завершающих символов
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"791.513"; wchar_t *end; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Когда вы запустите программу, вывод будет:
Широкая строка = 791,513 Значение с плавающей запятой = 791,513 Конечная строка =
Допустимое значение с плавающей запятой для функции wcstof () состоит из необязательного знака + или -, за которым следует один из следующих наборов:
- Для десятичных значений с плавающей запятой :
- Группа десятичных цифр (0–9), необязательно содержащая десятичную точку (.). Например: 13,170, -5,63 и т. Д.
- Необязательная часть экспоненты (e или E), за которой следует необязательный знак + или - и непустая последовательность десятичных цифр. Например: 3.46101e + 007, 13.19e-013 и т. Д.
- Для шестнадцатеричного значения с плавающей запятой :
- Строка, начинающаяся с 0x или 0X, за которой следует непустая последовательность шестнадцатеричных цифр, необязательно содержащая десятичную точку (.). Например: 0xfa5, -0xb1f.24 и т. Д.
- Необязательная часть экспоненты (p или P), за которой следует необязательный знак + или - и непустая последовательность шестнадцатеричных цифр. Например: 0x51c.23p5, -0x2a.3p-3 и т. Д.
- Бесконечность :
- INF или INFINITY (без учета регистра). Например: -Inf, InfiNiTy и т. Д.
- NaN (не число) :
- NAN или последовательность NAN (без учета регистра), где последовательность - это последовательность символов, состоящая только из буквенно-цифровых символов или символа подчеркивания (_). Результатом является тихий NaN. Например: Nan, NaNab1 и т. Д.
Пример 3: Как wcstof () работает с экспонентами и шестнадцатеричными числами?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"39.119e+2xxu0a93"; wchar_t str2() = L"0Xf1.23cu00d8a1"; wchar_t *end; float value; value = wcstof(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstof(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Когда вы запустите программу, вывод будет:
Широкая строка = 39.119e + 2xx ઓ Значение с плавающей запятой = 3911,9 Конечная строка = xx ઓ Широкая строка = 0Xf1.23cØa1 Значение с плавающей запятой = 241,14 Конечная строка = Øa1
Пример 4: случаи wcstof для INFINITY и NaN
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"-inFinityxu03a3y"; wchar_t str2() = L"NaN11u0429"; wchar_t *end; float value; value = wcstof(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstof(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Когда вы запустите программу, вывод будет:
Широкая строка = -inFinityxΣy Значение с плавающей запятой = -inf Конечная строка = xΣy Широкая строка = NaN11Щ Значение с плавающей запятой = nan Конечная строка = 11Щ
В общем, допустимый аргумент с плавающей запятой для функции wcstof () имеет следующую форму:
(пробел) (- | +) (цифры) (. цифры) ((e | E) (- | +) цифры)
Функция wcstof () игнорирует все начальные пробельные символы до тех пор, пока не будет найден основной непробельный символ.
Затем, начиная с этого символа, требуется как можно больше символов, которые формируют допустимое представление с плавающей запятой и преобразуют их в значение с плавающей запятой. Все, что осталось от строки после последнего допустимого символа, сохраняется в объекте, на который указывает str_end.
Пример 5: функция wcstof () с ведущими пробелами
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L" 21.69u04f8aa"; wchar_t *end; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Когда вы запустите программу, вывод будет:
Широкая строка = 21,69Ӹaa Значение с плавающей запятой = 21,69 Конечная строка = Ӹaa