如何使用 shell 脚本计算浮点数的近似值(例如,小数点后最多 4 位数字)?我有两个例子:
A=1.2345678
和B=1.2345678E-05
。
所以我想得到A=1.2346
和B=1.2346E-05
。
A
我可以使用以下方法快速完成工作cut
:
A=`echo $A | cut -c1-6`
但这给出了我A=1.2345
预期最后一位数字四舍五入的位置6
(因为下一位数字大于 5)。而且它只适用于小数点前的一位数字(如果我想近似怎么办?)同样100.2345678
适用。B
答案1
使用printf
:
$ printf "%.4f\n" "$A"
1.2346
$ printf "%.4f\n" "$B"
0.0000
$ printf "%.4e\n" "$B"
1.2346e-05
$ printf "%.14f\n" "$B"
0.00001234567800
$ printf "%.4g\n" "$B"
1.235e-05
$ printf "%.4g\n" "$A"
1.235
由于%e
可能会改变指数,为了确保保持相同,您可以使用 shell 的字符串操作将数字与指数分开并分别打印的功能:
$ B=100.12345678E-05
$ printf '%.5fE%s\n' "${B%E*}" "${B##*E}"
100.12346E-05
打印${B%E*}
第一个之前的所有内容E
以及${B##*E}
第一个之后的所有内容E
。