Функција вцстолд () у језику Ц ++ тумачи садржај широког низа као број са покретном тачком и враћа његову вредност као дуги дупли.
Функција вцстолд () такође поставља показивач да покаже на први широки знак након последњег важећег знака широког низа ако постоји, у супротном је показивач постављен на нулу.
Дефинисано је у заглављу датотеке.
прототип вцстолд ()
дуги двоструки вцстолд (цонст вцхар_т * стр, вцхар_т ** стр_енд);
Функција вцстолд () узима параметар широки низ и показивач на широки знак, интерпретира садржај широког низа као број са покретном тачком и враћа дугу двоструку вредност.
вцстолд () параметри
- стр: Широки низ који представља број са покретном тачком.
- стр_енд: Показивач на показивач на широк знак. Вредност стр_енд функција поставља на следећи знак у стр након последњег важећег знака. Овај параметар такође може бити нулти показивач.
вцстолд () Повратна вредност
Функција вцстолд () враћа:
- дуга двострука вредност (која се претвара из широког низа).
- 0.0 ако није било могуће извршити ваљану конверзију.
Ако је претворена вредност ван опсега, јавља се грешка опсега и враћа се позитиван или негативан ХУГЕ_ВАЛ .
Пример 1: Како функционише функција вцстолд ()?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"93.410u03b7u05ea"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Када покренете програм, излаз ће бити:
Широки низ = 93.410η ת Лонг Доубле вредност = 93.41 Крајњи низ = η ת
Пример 2: функција вцстолд () без пратећих знакова
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"93.410"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Када покренете програм, излаз ће бити:
Широки низ = 93.410 Дугачка двострука вредност = 93.41 Крајњи низ =
Важећа вредност са помичном зарезом за функцију вцстолд () састоји се од опционалног знака + или - иза којег следи један од следећих скупова:
- За децималну вредност са покретном зарезом :
- Група децималних цифара (0-9), која опционо садржи децималну тачку (.). На пример: 13.170, -5,63 итд.
- Изборни експонентни део (е или Е) праћен необавезним знаком + или - и непразним низом децималних цифара. На пример: 3,46101е + 007, 13,19е-013 итд.
- За хексадецималну вредност са покретном зарезом :
- Низ који започиње са 0к или 0Кс, праћен непразним низом хексадецималних цифара, који опционо садрже децималну тачку (.). На пример: 0кфа5, -0кб1ф.24 итд.
- Изборни експонентни део (п или П) праћен необавезним знаком + или - и непразним низом хексадецималних цифара. На пример: 0к51ц.23п5, -0к2а.3п-3 итд.
- Инфинити :
- ИНФ или ИНФИНИТИ (игноришући случај). На пример: -Инф, ИнфиНиТи итд.
- НаН (није број) :
- НАН или НАН секвенца (занемарујући случај) где је секвенца секвенца знакова која се састоји само од алфанумеричких знакова или доње црте (_). Резултат је тихи НаН. На пример: Нан, НаНаб1 итд.
Пример 3: Како вцстолд () ради са експонентима и хексадецималима?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"34.901u00c6u00f1"; wchar_t str2() = L"0Xfc1.a12u03c7r12"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Када покренете програм, излаз ће бити:
Широки низ = 34.901Ӕн Дуга двострука вредност = 34.901 Крајњи низ = Ӕн Широки низ = 0Ксфц1.а12χр12 Дугачка двострука вредност = 4033.63 Крајњи низ = χр12
Пример 4: вцстолд случајеви за ИНФИНИТИ и НаН
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"inFinityxu03a3y"; wchar_t str2() = L"NaN22u0429"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Када покренете програм, излаз ће бити:
Широки низ = инФинитикΣи Лонг Доубле вредност = инф Крајњи низ = кΣи Широки низ = НаН22Щ Лонг Доубле вредност = нан Крајњи низ = 22Щ
Генерално, важећи аргумент са помичном тачком за функцију вцстолд () има следећи облик:
(размак) (- | +) (цифре) (.цифре) ((е | Е) (- | +) цифре)
Функција вцстолд () игнорише све водеће размаке све док се не пронађе примарни не-размак.
Затим, почев од овог знака, потребно је што више знакова који формирају важећу представу с помичном тачком и претварају их у вредност са помичном тачком. Шта год је остало од низа након последњег важећег знака, чува се у објекту на који показује стр_енд.
Пример 5: функција вцстолд () са водећим размаком
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L" 59.013u0915u0975"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )
Када покренете програм, излаз ће бити:
Широки низ = 59.013 км Лонг Доубле вредност = 59.013 крајњи низ = број