如何在PowerShell中将字符串转换为十进制数?

7

我有一个字符串,

$string = "2,55"

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

请参考如何提问。您是否尝试过任何代码或有任何研究内容可展示此问题? - Nirav Mistry
4个回答

6

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

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

4
你应该使用当前的区域设置进行转换。用 , 替换为 . 不可靠且稍微慢一些(因为必须创建另一个字符串)。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"的指数形式,那么当前其他答案中没有一个实际有效(尽管它可能看起来有效)。要了解更多详细信息,请阅读如何在PowerShell中将类似于5.7303333333e+02的字符串转换为十进制?

3
简而言之 -
[decimal]$string.Replace(",", ".")

1
喜欢简洁! - jyao
1
@jyao 简洁并不等于正确。尝试在逗号地区设置下在.NET Core上运行,它会立即失败。 - phuclv

-1
为了强制将值或变量转换为特定的数据类型,请在方括号中以类型为前缀,这被称为 Cast 运算符并强制选择的数据类型:
$string = "100.5"
$decimal = [decimal]$string

$string + 0.5
# Outputs 100.10.5

$decimal + 0.5
# Outputs 101,0

更多信息可以在这里找到


1
这通常是有帮助的,但请注意,PowerShell 的转换总是应用 不变 的文化,其中小数点为 .。因此,OP 的输入字符串不会产生期望的结果:[decimal] "2,55" -> 255;也就是说,, 被解释为千位分隔符,并被有效地忽略了。 - mklement0
1
@mklement0,感谢您的反馈。我错过了这个细节。 - Modro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接