hba*_*ega 3 shell-script floating-point
如何使用 shell 脚本来近似浮点数(例如,小数点后最多 4 位数字)?我有两个例子:
A=1.2345678和B=1.2345678E-05。
所以我想得到A=1.2346和B=1.2346E-05。
我可以A使用cut以下方法快速完成工作:
A=`echo $A | cut -c1-6`
Run Code Online (Sandbox Code Playgroud)
但这给了我A=1.2345我期望最后一位四舍五入的位置6(因为下一位数字大于 5)。它也只适用于小数点前的一位数(如果我想近似100.2345678怎么办?)同样适用B。
使用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
Run Code Online (Sandbox Code Playgroud)
由于%e可能会更改指数,为了确保保持不变,您可以使用 shell 的字符串操作功能将数字与指数分开并分别打印:
$ B=100.12345678E-05
$ printf '%.5fE%s\n' "${B%E*}" "${B##*E}"
100.12346E-05
Run Code Online (Sandbox Code Playgroud)
该${B%E*}打印一切都交给第一E和${B##*E}是第一之后的所有内容E。