about_Numeric_Literals
簡短描述
本文說明 PowerShell 中數值的語法和使用方式。
詳細描述
數值常值有兩種:integer 和 real。 兩者都可以有類型和乘數後綴。
整數常值
整數常值可以用十進位或十六進位表示法寫入。 十六進位常值前面會加上 0x
,以區分它們與十進位數。
整數常值可以有類型後綴和乘數後綴。
尾碼 | 意義 |
---|---|
l |
long 數據類型 |
kb |
kibibyte (10241) 乘數 |
mb |
mebibyte (10242) 乘數 |
gb |
gigibyte (10243) 乘數 |
tb |
teribyte (10244) 乘數 |
pb |
petibyte (10245) 乘數 |
整數常值的型別取決於其值、類型後綴和數值乘數後綴。
對於沒有類型後綴的整數常值:
- 如果值可由 類型
[int]
表示,即其類型。 - 否則,如果值可由 類型
[long]
表示,即為其類型。 - 否則,如果值可由 類型
[decimal]
表示,即為其類型。 - 否則,它會以 類型
[double]
表示。
對於具有類型後綴的整數常值:
- 如果類型後綴是
u
,而且值可以以 類型[int]
表示,則其類型為[int]
。 - 如果類型後綴是
u
,而且值可以以 類型[long]
表示,則其類型為[long]
。 - 如果其值可由指定的型別表示,則為其型別。
- 否則,該常值的格式不正確。
實數常值
實際常值只能以十進位表示法撰寫。 這個表示法可以包含小數點後面的分數值,以及使用指數部分的科學表示法。
指數部分包含 『e』,後面接著選擇性符號 (+/-) 和代表指數的數位。 例如,常值 1e2
等於數值 100。
實際常值可以有類型後綴和乘數後綴。
尾碼 | 意義 |
---|---|
d |
decimal 資料類型 |
kb |
kibibyte (10241) 乘數 |
mb |
mebibyte (10242) 乘數 |
gb |
gigibyte (10243) 乘數 |
tb |
teribyte (10244) 乘數 |
pb |
petibyte (10245) 乘數 |
實際常值有兩種:double 和 decimal。 這些分別以 decimal-type 後綴的不存在或存在表示。 PowerShell 不支援值的常值表示 [float]
。 雙實常值的類型為 [double]
。 十進位實值的類型為 [decimal]
。
小數實值分數部分的尾端零很重要。
如果實際常值中 [double]
指數部分數位的值小於支援的最小值,則實際 [double]
常值的值為 0。 如果實際常值中的 [decimal]
指數部分數位值小於支援的最小值,該常值的格式不正確。 如果 或 實際常值中的[double]
[decimal]
指數部分數位值大於支援的最大值,該常值的格式不正確。
注意
語法允許雙實值具有長型別後綴。
PowerShell 會將此案例視為整數常值,其值是以 類型 [long]
表示。 此功能已保留,以便與舊版 PowerShell 回溯相容性。 不過,程式設計人員不建議使用此形式的整數常值,因為它們很容易遮蔽常值的實際值。 例如, 1.2L
具有值 1、 1.2345e1L
值為 12,且 1.2345e-5L
值為 0,其中沒有任何一個立即明顯。
數值乘數
為了方便起見,整數和實際常值可以包含數值乘數,這表示一組常用的乘冪 2。 數值乘數可以用大寫或小寫字母的任何組合來撰寫。
乘數後綴可以與 u
、 ul
和 l
類型後綴搭配使用。
乘數範例
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
數值類型快速鍵
PowerShell 支援下列類型加速器:
加速器 | 注意 | 描述 |
---|---|---|
[byte] |
位元組(未簽署) | |
[sbyte] |
位元組(帶正負號) | |
[Int16] |
16 位整數 | |
[UInt16] |
16 位整數 (不帶正負號) | |
[Int32] |
32 位元整數 | |
[int] |
[int32] 的別名 |
32 位元整數 |
[UInt32] |
32 位整數 (不帶正負號) | |
[Int64] |
64 位元整數 | |
[long] |
[int64] 的別名 |
64 位元整數 |
[UInt64] |
64 位整數 (不帶正負號) | |
[bigint] |
請參閱 BigInteger 結構 | |
[single] |
單精度浮點數 | |
[float] |
[single] 的別名 |
單精度浮點數 |
[double] |
雙精確度浮點數 | |
[decimal] |
128 位浮點數 |
使用其他數值類型
若要使用任何其他數值類型,您必須使用類型加速器,這並非沒有任何問題。 例如,高整數值在轉換成任何其他類型之前,一律會剖析為 double。
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
此值會先剖析為雙精度,以較高的範圍遺失精確度。 若要避免這個問題,請輸入值做為字串,然後加以轉換:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
範例
下表包含數個數值常值範例,並列出其類型和值:
數字 | 類型 | 值 |
---|---|---|
100 | Int32 | 100 |
100D | Decimal | 100 |
100l | Int64 | 100 |
1e2 | 雙重 | 100 |
1.e2 | 雙重 | 100 |
0x1e2 | Int32 | 482 |
0x1e2L | Int64 | 482 |
0x1e2D | Int32 | 7725 |
482D | Decimal | 482 |
482gb | Int64 | 517543559168 |
0x1e2lgb | Int64 | 517543559168 |
數值類型轉換
當字串轉換成數位時,支援其他十六進位格式指標。 這些額外的格式無法辨識為常值。
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
看起來像數值常值的命令
任何看起來像數值常值的命令都必須使用呼叫運算符執行&
,否則它會解譯為相關聯的型別數目。
存取數值物件的屬性和方法
若要存取數值常值的成員,在某些情況下,您需要以括弧括住常值。
- 常值沒有小數點
- 常值在小數點之後沒有任何數位
- 常值沒有後綴
例如,下列範例會失敗:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
下列範例可運作:
PS> 2L.GetType().Name
Int64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
前兩個範例會運作,而不用括弧括住常值,因為PowerShell剖析器可以判斷數值常值結尾和 GetType 方法的開頭。