PowerShell使用Sort-Object排序带货币符号金额的解决方法
PowerShell 库存价格字段排序方案
无需手动排序,通过Sort-Object的计算属性做正确的数值类型转换即可实现准确排序。
问题根因
- 直接指定
Price属性排序时,Sort-Object对字符串类型值默认按字典序逐字符比较,会出现$200排序优先级高于$1000的经典排序错误 - 直接强转
[int]触发格式报错有两个核心原因:一是字符串开头的$货币符号不属于整数字符合法范围,二是库存价格带小数位,本身不适合用整数类型存储
实现代码
标准场景写法(推荐)
货币类数值优先使用decimal类型处理,可避免浮点精度误差,PowerShell的[decimal]转换支持自动识别当前系统区域下的标准货币格式,可直接处理带$符号的价格字符串:
$Result | Sort-Object -Property { [decimal]$_.Price } | Format-Table -Property Price
兼容场景写法
如果存在跨区域货币符号识别失败、价格带千分位逗号等杂项字符的情况,可以先过滤掉所有非数字、非小数点的字符再做类型转换,兼容性更强:
$Result | Sort-Object -Property { [decimal]($_.Price -replace '[^\d.]') } | Format-Table -Property Price
适配提示:如果使用区域以逗号作为小数分隔符,只需将上述正则替换规则调整为
[^\d,]即可正常转换。
内容的提问来源于stack exchange,提问作者WayneAM
相关产品推荐
相关产品推荐

