在我的脚本中,我从另一个变量mflow
计算变量folder
。计算必须以高精度执行,但最终结果必须截断为一个有效数字。目前我正在这样做:
#!/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=$(bc <<< "scale=1;$temp*1/1")
似乎有点浪费。有没有办法以高精度执行中间计算,并将结果分配给具有所选(较低)精度的mflow
?当然,我不想过多地牺牲脚本的可读性。因此,请问,不是一个看起来像sed
&#34;来自地狱的一行的解决方案&#34; ;)(好吧,我猜sed
无法用于此,但你得到了我的观点。)
如果有人想知道为什么我不写
,PS会发生错误mflow=$(bc <<< "scale=1;$folder/100*14.8")
只需在脚本中尝试修改,看看会发生什么(mflow
的最后三个值变得相等,这会在脚本工作流程中产生问题。)
答案 0 :(得分:1)
您可以使用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
,你应该知道这个&#34;功能&#34;:
kent$ echo "scale=1;17.17777/1"|bc
17.1
它会为您17.1
而不是17.2
。我希望您在选择bc
作为工具之前了解这一点。