名稱空間
變體
操作

std::numeric_limits<T>::digits10

來自 cppreference.com
< cpp‎ | 型別‎ | 數值限制
 
 
 
 
 
static const int digits10;
(C++11 前)
static constexpr int digits10;
(C++11 起)

std::numeric_limits<T>::digits10 的值是型別 T 可以不變地表示的十進位制位數,也就是說,任何具有此數量的有效十進位制數字的數字,都可以轉換為型別 T 的值,然後再轉換回十進位制形式,而不會因舍入或溢位而改變。對於基數radix型別,它是digits()的值(對於浮點型別,是digits - 1),乘以log10(radix)並向下取整。

[編輯] 標準特化

T std::numeric_limits<T>::digits10 的值
/* 未特化 */ 0
bool 0
char std::numeric_limits<char>::digits * std::log10(2)
signed char std::numeric_limits<signed char>::digits * std::log10(2)
unsigned char std::numeric_limits<unsigned char>::digits * std::log10(2)
wchar_t std::numeric_limits<wchar_t>::digits * std::log10(2)
char8_t (C++20起) std::numeric_limits<char8_t>::digits * std::log10(2)
char16_t (C++11起) std::numeric_limits<char16_t>::digits * std::log10(2)
char32_t (C++11起) std::numeric_limits<char32_t>::digits * std::log10(2)
short std::numeric_limits<short>::digits * std::log10(2)
unsigned short std::numeric_limits<unsigned short>::digits * std::log10(2)
int std::numeric_limits<int>::digits * std::log10(2)
unsigned int std::numeric_limits<unsigned int>::digits * std::log10(2)
long std::numeric_limits<long>::digits * std::log10(2)
unsigned long std::numeric_limits<unsigned long>::digits * std::log10(2)
long long (C++11起) std::numeric_limits<long long>::digits * std::log10(2)
unsigned long long (C++11起) std::numeric_limits<unsigned long long>::digits * std::log10(2)
float FLT_DIG(對於IEEE float,值為6
double DBL_DIG(對於IEEE double,值為15
long double LDBL_DIG(對於80位Intel long double,值為18;對於IEEE四精度,值為33

[編輯] 示例

一個8位二進位制型別可以精確地表示任何兩位十進位制數,但無法表示三位十進位制數256..999。8位型別的 digits10 值為 2 (8 * std::log10(2) 為 2.41)。

標準32位IEEE 754浮點型別有一個24位小數部分(寫入23位,一位隱含),這可能表明它可以表示7位小數(24 * std::log10(2) 為 7.22),但相對舍入誤差是非均勻的,有些具有7位小數的浮點值在轉換為32位浮點數並返回時無法保持不變:最小的正例是 8.589973e9,在往返轉換後變為 8.589974e9。這些舍入誤差不能超過表示中的一位,並且 digits10 計算為 (24 - 1) * std::log10(2),結果為 6.92。向下取整結果為 6。

同樣,16位數字字串 9007199254740993 在文字->雙精度->文字往返轉換後無法保持不變,變為 9007199254740992:64位IEEE 754雙精度型別僅保證15位十進位制數的往返轉換。

[編輯] 另請參閱

[靜態] (C++11)
區分此型別所有值所需的十進位制位數
(public static member constant) [編輯]
[靜態]
給定型別的表示所用的基或整數底
(public static member constant) [編輯]
[靜態]
能無變化表示的 radix 數字位數
(public static member constant) [編輯]
比最小負數基冪大一,該基冪是有效的正規化浮點值
(public static member constant) [編輯]
比最大整數基冪大一,該基冪是有效的有限浮點值
(public static member constant) [編輯]