【问题标题】:How to convert string to decimal in powershell?如何在powershell中将字符串转换为十进制?
【发布时间】:2019-08-08 09:53:13
【问题描述】:

我有一个字符串,

$string = "2,55"

如何将此字符串转换为十进制?

【问题讨论】:

标签: powershell decimal data-conversion


【解决方案1】:

另一种转换方式(不一定更好)是使用具有特定文化的ToDecimal 方法。这里我使用的是标准的法国文化。

 [System.Convert]::ToDecimal("2,55",[cultureinfo]::GetCultureInfo('fr-FR'))
 2.55

【讨论】:

    【解决方案2】:

    总之——

    [decimal]$string.Replace(",", ".")
    

    【讨论】:

      【解决方案3】:

      您应该使用当前语言环境进行转换。用. 替换, 是不可靠的,而且速度稍慢(因为必须创建另一个字符串)。 ParseTryParse 都有一个可以使用的区域性参数

      PS D:\> $string = "2,55"
      PS D:\> $culture = Get-Culture
      PS D:\> [decimal]::Parse($string, $culture)
      2.55
      PS D:\> [decimal]$dec = 0
      PS D:\> [decimal]::TryParse($string, [Globalization.NumberStyles]::Float, $culture, [ref]$dec)
      True
      PS D:\> $dec
      2.55
      

      如果您知道输入的语言环境,则直接在该语言环境中解析,使用GetCultureInfo

      $culture = [cultureinfo]::GetCultureInfo('fr-FR')
      

      请注意,如果字符串包含像“2,55e2”这样的指数,那么当前的答案实际上都不起作用(尽管它可能似乎起作用)。更多详情请阅读How can I convert a string such as 5.7303333333e+02 to decimal in PowerShell?

      【讨论】:

        【解决方案4】:

        要强制转换为特定数据类型,请在值或变量前面加上方括号中的类型,这称为强制转换运算符并强制选择的数据类型:

        $string = "100.5"
        $decimal = [decimal]$string
        
        $string + 0.5
        # Outputs 100.10.5
        
        $decimal + 0.5
        # Outputs 101,0
        

        更多信息可以找到here

        【讨论】:

        • 这通常很有帮助,但请注意 PowerShell 的强制转换始终应用 invariant 区域性,其中小数点为 .。因此,OP 的输入字符串不会产生预期的结果:[decimal] "2,55" -> 255;也就是说,, 被解释为千位分组符号并被有效忽略。
        • @mklement0,感谢您的反馈。我错过了这个细节。
        猜你喜欢
        • 1970-01-01
        • 2013-02-07
        • 2021-09-30
        • 2011-08-25
        • 2014-04-28
        • 1970-01-01
        • 2018-08-31
        • 2022-07-22
        • 1970-01-01
        相关资源
        最近更新 更多