Bash 在脚本中,以高精度计算浮点,并以低精度存储在shell变量值中
在我的一个脚本中,我从另一个变量Bash 在脚本中,以高精度计算浮点,并以低精度存储在shell变量值中,bash,shell,Bash,Shell,在我的一个脚本中,我从另一个变量文件夹计算一个变量mflow。必须以高精度执行计算,但最终结果必须截断为一个有效数字。目前我正在这样做: #!/bin/bash for folder in 100 115 116 117; do temp=$(bc <<< "scale=20;$folder/100*14.8") mflow=$(bc <<< "scale=1;$temp*1/1") echo $mflow done exi
文件夹
计算一个变量mflow
。必须以高精度执行计算,但最终结果必须截断为一个有效数字。目前我正在这样做:
#!/bin/bash
for folder in 100 115 116 117; do
temp=$(bc <<< "scale=20;$folder/100*14.8")
mflow=$(bc <<< "scale=1;$temp*1/1")
echo $mflow
done
exit 0
只需在脚本中尝试该修改,看看会发生什么(mflow的最后三个值变为相等,这会在脚本工作流中产生问题)。您可以使用awk进行计算和输出格式设置:
for folder in 100 115 116 117; do
awk -v f="$folder" 'BEGIN{printf "%.1f\n", f/100*14.8}'
done
因此,它给出:
14.8
17.0
17.2
17.3
如果要打印更精确的结果,可以将%.1f
更改为%.20f
,然后:
14.80000000000000071054
17.01999999999999957367
17.16799999999999926104
17.31599999999999894840
注:
如果您选择了bc
,您应该知道此“功能”:
它将为您提供
17.1
,而不是17.2
。我希望您在选择bc
作为您的工具之前就知道这一点。据我所知$(bc@Dziugas,不,这不是一个好主意。我想以指定的精度四舍五入到最接近的fp,而不仅仅是截断。换句话说,如果我有17.5757,我需要17.6,而不是17.5。事实上我误解了你的要求。我想从否决票中学习……否决票可以留下一些评论吗?谢谢,我测试了它,它可以工作。我已经修改了第二行是mflow=$(awk-v f=“$folder”'BEGIN{printf”%.1f\n,f/100*14.8}')
,因为我需要将计算结果存储在变量中,但除此之外,代码工作正常。
14.8
17.0
17.2
17.3
14.80000000000000071054
17.01999999999999957367
17.16799999999999926104
17.31599999999999894840
kent$ echo "scale=1;17.17777/1"|bc
17.1