添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
从容的路灯  ·  加载tensorflow ...·  7 月前    · 
跑龙套的橡皮擦  ·  Go Recursive Mutex ...·  1 年前    · 
神勇威武的菠萝  ·  python selenium ...·  1 年前    · 
  • 如果类型后缀为 u ,并且值可由 类型 [uint] 表示,则其类型为 [uint]
  • 如果类型后缀为 u ,并且值可由 类型 [ulong] 表示,则其类型为 [ulong]
  • 如果其值可以由指定的类型表示,则为其类型。
  • 否则,该文本的格式不正确。
  • 实际文本只能用十进制表示法编写。 此表示法可以包括小数点后面的小数值和使用指数部分的科学记数法。

    指数部分包括一个“e”,后跟一个可选符号 (+/-) 和一个表示指数的数字。 例如,文本值 1e2 等于数值 100。

    真实文本可以具有类型后缀和乘数后缀。

    Suffix

    有两种类型的实数文本:double 和 decimal。 它们分别由十进制类型后缀的缺失或存在来指示。 PowerShell 不支持值的文本表示形式 [float] 。 双实文本的类型 [double] 为 。 十进制实文本的类型 [decimal] 为 。 十进制实数文本的小数部分中的尾随零很重要。

    如果实际文本中 [double] 指数部分的数字值小于支持的最小值,则实际 [double] 文本的值为 0。 如果实际文本中 [decimal] 指数部分的数字值小于支持的最小值,则表示该文本格式不正确。 如果 或 [decimal] 实际文本中 [double] 指数部分的数字值大于支持的最大值,则表示该文本格式不正确。

    语法允许双实文本具有长类型后缀。 PowerShell 将此情况视为一个整数文本,其值由类型 [long] 表示。 保留此功能是为了向后兼容早期版本的 PowerShell。 但是,不建议程序员使用这种形式的整数文本,因为它们很容易掩盖文本的实际值。 例如, 1.2L 具有值 1、 1.2345e1L 值 12 和 1.2345e-5L 值 0,这些值都不是显而易见的。

    为方便起见,整数和实文本可以包含一个数值乘数,该乘数指示一组常用的 2 幂之一。 数字乘数可以采用大写或小写字母的任意组合编写。

    乘数后缀可以与任何类型后缀结合使用,但必须在类型后缀后面显示。 例如,文本 100gbL 格式不正确,但文本 100Lgb 有效。

    如果乘数创建的值超出了后缀指定的数值类型的可能值,则文本格式不正确。 例如,文本 1usgb 格式不正确,因为该值 1gb 大于后缀指定的 us 类型所允许 [ushort] 的值。

    PS> 1kb
    PS> 1.30Dmb
    1363148.80
    PS> 0x10Gb
    17179869184
    PS> 1.4e23tb
    1.5393162788864E+35
    PS> 0x12Lpb
    20266198323167232
    

    数字类型快捷键

    PowerShell 支持以下类型加速器:

    使用二进制或十六进制数

    如果且仅n当指定了后缀时,过大的二进制或十六进制文本才能返回 ,[bigint]而不是失败分析。 但是,仍遵循偶数 [decimal] 范围以上的符号位:

  • 如果二进制字符串是 8 位长度的倍数,则最高位被视为符号位。
  • 如果长度为 8 的倍数的十六进制字符串的第一个数字为 8 或更高,则数字被视为负数。
  • 在二进制文本和十六进制文本上指定无符号后缀会忽略符号位。 例如, 0xFFFFFFFF 返回 -1,但 0xFFFFFFFFu 返回 [uint]::MaxValue 4294967295 的 。

    在 PowerShell 7.1 中,对十六进制文本使用类型后缀现在会返回该类型的有符号值。 例如,在 PowerShell 7.0 中,表达式 0xFFFFs 返回错误,因为正值对于类型 [int16] 来说太大。 PowerShell 7.1 将此解释为 -1 类型 [int16]

    将文本作为 0 前缀将绕过此前缀,并被视为无符号。 例如:0b011111111。 使用范围中的 [bigint] 文本时,这是必需的,因为 un 后缀不能组合在一起。

    还可以使用 - 前缀来否定二进制文本和十六进制文本。 这可能会导致一个正数,因为允许使用符号位。

    BigInteger 后缀数字接受符号位:

  • BigInteger 后缀十六进制将长度为 8 个字符的任意文本的高位视为符号位。 长度不包括 0x 前缀或任何后缀。
  • BigInteger 后缀二进制文件接受 96 个字符和 128 个字符的符号位,之后每 8 个字符接受一次。
  • 数字类型转换

    将字符串转换为数字时,支持其他十六进制格式指示器。 这些附加格式不会被识别为文本。

    [int] '0xF' -eq 0xF
    [int] '&hF' -eq 0xF
    [int] '#F' -eq 0xF
    [int] '0b1111' -eq 0b1111
    [int] '0b1111' -eq 15
    

    类似于数字文本的命令

    任何看起来像有效数字文本的命令都必须使用调用运算符 (&) 执行,否则将解释为数字。 格式不正确的文本和有效的语法 (如 1usgb )将导致以下错误:

    PS> 1usgb
    At line:1 char:6
    + 1usgb
    +      ~
    The numeric constant 1usgb is not valid.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : BadNumericConstant
    

    但是,具有无效语法(如 ) 1gbus 的格式不正确的文本将被解释为标准裸字符串,并且可以在调用命令的上下文中解释为有效的命令名称。

    访问数值对象的属性和方法

    若要访问数值文本的成员,在某些情况下需要将文本括在括号中。

  • 文本没有小数点
  • 文本在小数点后没有任何数字
  • 文本没有后缀
  • 例如,以下示例失败:

    PS> 2.GetType().Name
    At line:1 char:11
    + 2.GetType().Name
    +           ~
    An expression was expected after '('.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedExpression
    

    以下示例起作用:

    PS> 2uL.GetType().Name
    UInt64
    PS> 1.234.GetType().Name
    Double
    PS> (2).GetType().Name
    Int32
    

    前两个示例无需将文本值括在括号中,因为 PowerShell 分析程序可以确定数值文本结束和 GetType 方法开始的位置。

    PowerShell 如何分析数字文本

    PowerShell v7.0 更改了数值文本分析方式,以启用新功能。

    分析实数值文本

    如果文本包含小数点或电子表示法,则文本字符串将分析为实数。

  • 如果存在十进制后缀,则直接进入 [decimal]
  • 否则,将 分析为 [Double] 并将乘数应用于值。 然后检查类型后缀并尝试强制转换为适当的类型。
  • 如果字符串没有类型后缀,则分析为 [Double]
  • 分析整数数字文本

    使用以下步骤分析整数类型文本:

  • 确定基数格式
    • 对于二进制格式,请分析为 [BigInteger]
    • 对于十六进制格式,当 [BigInteger] 值在 [int][long] 范围内时,使用特殊大小写进行分析以保留原始行为。
    • 如果既不是二进制也不是十六进制,则通常将 分析为 [BigInteger]
    • 在尝试任何强制转换之前应用乘数值,以确保可以适当地检查类型边界,而不会发生溢出。
    • 检查类型后缀。
    • 检查类型边界并尝试分析为该类型。
    • 如果未使用后缀,则按以下顺序对值进行边界检查,导致第一次成功测试确定数字的类型。
    • [int]
    • [long]
    • [decimal] 仅) (base-10 文本
    • [double] 仅) (base-10 文本
    • 如果值超出 [long] 十六进制数和二进制数的范围,则分析失败。
    • 如果值超出 [double] 10 基数的范围,则分析会失败。
    • 必须使用 后缀显式写入较高的值, n 以便将文本分析为 BigInteger
    • 分析大值文本

      以前,较高的整数值在转换为任何其他类型之前被分析为 double。 这会导致较高范围内的精度损失。 例如:

      PS> [bigint]111111111111111111111111111111111111111111111111111111
      111111111111111100905595216014112456735339620444667904
      

      若要避免此问题,必须以字符串的形式编写值,然后转换它们:

      PS> [bigint]'111111111111111111111111111111111111111111111111111111'
      111111111111111111111111111111111111111111111111111111
      

      在 PowerShell 7.0 中, N 必须使用 后缀。

      PS> 111111111111111111111111111111111111111111111111111111n
      111111111111111111111111111111111111111111111111111111
      

      此外,应使用小数后缀D来表示 和 [decimal]::MaxValue 之间的[ulong]::MaxValue值,以保持准确性。 如果没有后缀,这些值将分析为 [Double] 使用实际分析模式。

  •