通过正确舍入来近似浮点数

通过正确舍入来近似浮点数

如何使用 shell 脚本计算浮点数的近似值(例如,小数点后最多 4 位数字)?我有两个例子:

A=1.2345678B=1.2345678E-05

所以我想得到A=1.2346B=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

相关内容