C++ 中的wcstold() 函数将宽字符串的内容解释为浮点数,并将其值作为长双精度数返回。
wcstold() 函数还设置一个指针,指向宽字符串的最后一个有效字符之后的第一个宽字符(如果有),否则指针设置为空。
它在<cwchar> 头文件中定义。
wcstold()原型
long double wcstold( const wchar_t* str, wchar_t** str_end );
wcstold() 函数将宽字符串和指向宽字符的指针作为其参数,将宽字符串的内容解释为浮点数并返回长双精度值。
参数:
str
:具有浮点数表示的宽字符串。str_end
:指向宽字符指针的指针。 str_end 的值由函数设置为 str 中最后一个有效字符之后的下一个字符。该参数也可以是空指针。
返回:
wcstold() 函数返回:
- 一个长双精度值(从宽字符串转换而来)。
- 如果无法执行有效转换,则为 0.0。
如果转换后的值超出范围,则会发生范围错误并返回正数或负数HUGE_VAL。
示例 1:wcstold() 函数如何工作?
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US.UTF-8");
wchar_t str[] = L"93.410\u03b7\u05ea";
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;
}
运行程序时,输出将是:
Wide String = 93.410ηת Long Double value = 93.41 End String = ηת
示例 2:wcstold() 函数没有尾随字符
#include <cwchar>
#include <clocale>
#include <iostream>
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;
}
运行程序时,输出将是:
Wide String = 93.410 Long Double value = 93.41 End String =
wcstold() 函数的有效浮点值包含可选的 + 或 - 符号,后跟以下集合之一:
- 对于十进制浮点值:
- 一组十进制数字 (0-9),可选择包含小数点 (.)。例如:13.170、-5.63 等。
- 可选的 index 部分(e 或 E),后跟可选的 + 或 - 符号和非空的十进制数字序列。例如:3.46101e+007、13.19e-013等。
- 对于十六进制浮点值:
- 以 0x 或 0X 开头的字符串,后跟一个非空的十六进制数字序列,可以选择包含小数点 (.)。例如:0xfa5、-0xb1f.24 等。
- 可选的 index 部分(p 或 P),后跟可选的 + 或 - 符号和非空的十六进制数字序列。例如:0x51c.23p5、-0x2a.3p-3 等。
- Infinity:
- INF 或 INFINITY(忽略大小写)。例如:-Inf、InfiNiTy 等。
- NaN(不是数字):
- 南或南序列(忽略大小写)其中序列是仅由字母数字字符或下划线 (_) 组成的字符序列。结果是安静的 NaN。例如:Nan、NaNab1 等。
示例 3:wcstold() 如何与 index 和十六进制一起使用?
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US.UTF-8");
wchar_t str1[] = L"34.901\u00c6\u00f1";
wchar_t str2[] = L"0Xfc1.a12\u03c7r12";
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;
}
运行程序时,输出将是:
Wide String = 34.901Æñ Long Double value = 34.901 End String = Æñ Wide String = 0Xfc1.a12χr12 Long Double value = 4033.63 End String = χr12
示例 4:INFINITY 和 NaN 的 wcstold 案例
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US.UTF-8");
wchar_t str1[] = L"inFinityx\u03a3y";
wchar_t str2[] = L"NaN22\u0429";
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;
}
运行程序时,输出将是:
Wide String = inFinityxΣy Long Double value = inf End String = xΣy Wide String = NaN22Щ Long Double value = nan End String = 22Щ
通常,wcstold() 函数的有效浮点参数具有以下形式:
[whitespace] [- | +] [digits] [.digits] [ {e | E }[- | +]digits]
wcstold() 函数会忽略所有前导空白字符,直到找到主要的非空白字符。
然后,从这个字符开始,尽可能多的字符组成一个有效的浮点表示并将它们转换为浮点值。最后一个有效字符之后字符串的剩余部分存储在str_end 指向的对象中。
示例 5:wcstold() 带有前导空格的函数
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US.UTF-8");
wchar_t str[] = L" 59.013\u0915\u0975";
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;
}
运行程序时,输出将是:
Wide String = 59.013कॵ Long Double value = 59.013 End String = कॵ
相关用法
- C++ wcstol()用法及代码示例
- C++ wcstoll()用法及代码示例
- C++ wcstod()用法及代码示例
- C++ wcstok()用法及代码示例
- C++ wcstof()用法及代码示例
- C++ wcstombs()用法及代码示例
- C++ wcstoull()用法及代码示例
- C++ wcstoul()用法及代码示例
- C++ wcsftime()用法及代码示例
- C++ wcscspn()用法及代码示例
- C++ wcsncmp()用法及代码示例
- C++ wcsstr()用法及代码示例
- C++ wcsrchr()用法及代码示例
- C++ wcsncpy()用法及代码示例
- C++ wcslen()用法及代码示例
- C++ wcsspn()用法及代码示例
- C++ wcschr()用法及代码示例
- C++ wcspbrk()用法及代码示例
- C++ wcscat()用法及代码示例
- C++ wcscoll()用法及代码示例
注:本文由纯净天空筛选整理自 C++ wcstold()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。