由于使用 bc 的以下命令不适用于科学计数法中的数字,因此我想知道是否有替代方案,例如使用 awk?
sum=$( IFS="+"; bc <<< "${arrValues[*]}" )
答案1
sum=$(
awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${arrValues[@]}"
)
使用 zsh (如果你不有使用bash
),因为它内部支持浮点数:
sum=$((${(j[+])arrValues}))
和ksh93
:
如果您需要提供的精度bc
,您可以预处理数字,以便12e23
将其更改为(12*10^23)
:
sum=$(
IFS=+
sed 's/\([0-9.]*\)[eE]\([-+]*[0-9]*\)/(\1*10^\2)/g' <<< "${arrValues[*]}" |
bc -l
)
答案2
Perl解决方案:
perl -MList::Util=sum -l -e 'print sum(@ARGV)' -- "${array[@]}"
或者对于任意精度:
perl -Mbignum -MList::Util=sum -l -e 'print sum(0, @ARGV)' -- "${array[@]}"
(添加文字0
以强制使用 bignums 进行求和)。