我是 BASH 的新手,了解到 printf 和 echo 都会写入标准输出。但是,我通过以下示例了解了这一点,该示例从输入中读取表达式并计算结果,精确到小数点后 3 位:
read exp
printf "%.3f\n" "$(echo $exp | bc -l)"
我不明白为什么 echo 会作为语句中的参数传递到这里printf
。还有其他方法可以仅使用 来表示语句吗echo
?
答案1
之后read exp
,您可以echo
按如下方式使用:
$ echo "scale=3; $exp/1" | bc
9.456
但请注意,此命令不需要echo
:
$ bc <<< "scale=3; $exp/1"
9.456
编辑:为了获得四舍五入的结果,您必须使用printf
内置的 bash,因为bc
无法对值进行四舍五入。
以下命令按预期工作:
echo "scale=4; $exp" | bc | xargs printf "%.3f\n"
答案2
这是一个仅使用的解决方案echo
:
.
如果你在有理数中使用小数点 ( ):$ read exp 123.4567 $ int=${exp%%.*} $ rat=${exp##*.} $ echo $int.${rat:0:3} 123.456
,
如果你在有理数中使用小数逗号( )(就像我和欧洲大陆大部分地区使用的那样):$ read exp 123,4567 $ int=${exp%%,*} $ rat=${exp##*,} $ echo $int,${rat:0:3} 123,456
有关详细信息,请参阅高级 Bash 脚本指南:操作字符串。