krr*_*ish 7 math arithmetic-expressions bc
我正在尝试解决这个bash脚本,该脚本从用户读取算术表达式并将其回显到输出屏幕,最后向上舍入3个小数位.
样本输入
5+50*3/20 + (19*2)/7
Run Code Online (Sandbox Code Playgroud)
样本输出
17.929
Run Code Online (Sandbox Code Playgroud)
我的代码是
read x
echo "scale = 3; $x" | bc -l
Run Code Online (Sandbox Code Playgroud)
当有输入时
5+50*3/20 + (19*2)/7
Run Code Online (Sandbox Code Playgroud)
**我的输出是**
17.928
Run Code Online (Sandbox Code Playgroud)
机器想要它
17.929
Run Code Online (Sandbox Code Playgroud)
由于这个原因我得到了错误的解决方案.任何的想法 ?
这里的关键是确保将 printf 与“%.3f”的格式规范一起使用,并且只要 bc 的“scale=4”,printf 就会按照你的意愿进行四舍五入。
这是一个有效的脚本:
echo -e "please enter math to calculate: \c"
read x
printf "%.3f\n" $(echo "scale=4;$x" | bc -l)
Run Code Online (Sandbox Code Playgroud)
如果在命令行中运行此命令,您可以了解上述解决方案的情况:echo "scale=4;5+50*3/20 + (19*2)/7" | bc结果将为 17.9285。当该结果作为参数提供给 printf 时,该函数会考虑第四位小数并将该值四舍五入,以便格式化的结果显示为精确的三位小数,并且值为 17.929。
或者,这也可以在没有管道的情况下通过将 here 文档重定向为 bc 的输入来工作,如下避免创建子 shell:
echo -e "please enter math to calculate: \c"
read x
printf "%.3f\n" $(bc -l <<< "scale=4;$x")
Run Code Online (Sandbox Code Playgroud)