當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ wcstold()用法及代碼示例

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++ wcstold()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。