Measure-Object求和异常:为何未正确计算数组数值总和?
问题原因及解决方法
问题根源
你犯了一个关键错误:measure-object -property length是在计算每个元素的字符串长度总和,而非数值本身的和。比如"0.000"的字符串长度是5,"2387.500"是7,"1610"是4,几个数的长度加起来刚好是你得到的27——这说明你的Profit列元素实际是字符串类型,而非数值类型。
高效求和方法
方法1:修正Measure-Object用法
如果Profit元素已经是数值类型(int/double),直接省略-property length,让Measure-Object默认处理数值:
$array.'Profit' | measure-object -sum -minimum -maximum -average
如果元素是字符串类型,先转成数值再计算:
$array.'Profit' | ForEach-Object { [double]$_ } | measure-object -sum -minimum -maximum -average
方法2:用LINQ实现更高性能(适合大数据量)
处理大型数组时,LINQ的效率比管道更高:
# 字符串转数值后求和 [Linq.Enumerable]::Sum($array.'Profit' | ForEach-Object { [double]$_ }) # 元素已是数值类型时直接求和 [Linq.Enumerable]::Sum($array.'Profit')
内容的提问来源于stack exchange,提问作者iceman
相关产品推荐
相关产品推荐

