共用方式為


about_Numeric_Literals

簡短描述

本文說明 PowerShell 中數值的語法和使用方式。

詳細描述

數值常值有兩種:integer 和 real。 兩者都可以有類型和乘數後綴。

整數常值

整數常值可以用十進位或十六進位表示法寫入。 十六進位常值前面會加上 0x ,以區分它們與十進位數。

整數常值可以有類型後綴和乘數後綴。

尾碼 意義
l long 數據類型
kb kbbyte 乘數
mb MB 乘數
gb gbbyte 乘數
tb TB 乘數
Pb PB 乘數

整數常值的型別取決於其值、類型後綴和數值乘數後綴。

對於沒有類型後綴的整數常值:

  • 如果值可由 類型 [int]表示,即其類型。
  • 否則,如果值可由 類型 [long]表示,即為其類型。
  • 否則,如果值可由 類型 [decimal]表示,即為其類型。
  • 否則,它會以 類型 [double]表示。

對於具有類型後綴的整數常值:

  • 如果類型後綴是 u ,而且值可以以 類型 [int] 表示,則其類型為 [int]
  • 如果類型後綴是 u ,而且值可以以 類型 [long] 表示,則其類型為 [long]
  • 如果其值可由指定的型別表示,則為其型別。
  • 否則,該常值的格式不正確。

實數常值

實際常值只能以十進位表示法撰寫。 這個表示法可以包含小數點後面的分數值,以及使用指數部分的科學表示法。

指數部分包含 『e』,後面接著選擇性符號 (+/-) 和代表指數的數位。 例如,常值 1e2 等於數值 100。

實際常值可以有類型後綴和乘數後綴。

尾碼 意義
d decimal 資料類型
kb kbbyte 乘數
mb MB 乘數
gb gbbyte 乘數
tb TB 乘數
pb PB 乘數

實際常值有兩種: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。 數值乘數可以用大寫或小寫字母的任何組合來撰寫。

乘數後綴可以與 uull 類型後綴搭配使用。

乘數範例

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 Double 100
1.e2 Double 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 方法的開頭。