如何打印浮点数小数点后的前三位?

cod*_*r_r 5 command-line bash

我是 BASH 的新手,了解到 printf 和 echo 都写入标准输出。但是,我通过以下示例从输入中读取表达式并将结果计算为小数点后 3 位的精度:

read exp
printf "%.3f\n" "$(echo $exp | bc -l)"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么 echo 在此处作为printf语句中的参数传递。有没有其他方法可以仅使用 来表示语句echo

Syl*_*eau 4

之后read exp,您可以使用echo如下:

$ echo "scale=3; $exp/1" | bc
9.456
Run Code Online (Sandbox Code Playgroud)

但请注意,此命令不需要echo

$ bc <<< "scale=3; $exp/1"
9.456
Run Code Online (Sandbox Code Playgroud)

编辑:为了获得舍入结果,您必须使用printfbash 内置函数,因为bc无法对值进行舍入。

以下命令按预期工作:

 echo "scale=4; $exp" | bc | xargs printf "%.3f\n"
Run Code Online (Sandbox Code Playgroud)