![计算表达式并四舍五入到小数点后三位](https://linux22.com/image/60136/%E8%AE%A1%E7%AE%97%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%B9%B6%E5%9B%9B%E8%88%8D%E4%BA%94%E5%85%A5%E5%88%B0%E5%B0%8F%E6%95%B0%E7%82%B9%E5%90%8E%E4%B8%89%E4%BD%8D.png)
我有一个表达式"5+50*3/20 + (19*2)/7"
,需要将其四舍五入到小数点后三位。这个问题的答案是17.92857142857143
。当我使用下面的脚本时,它给了我17.928
.答案应该是17.929
。
read exp
echo "scale=3; $exp" |bc -l
还有一个问题是如何使用printf
来完成相同的任务
答案1
就这样写:
read exp
printf %.3f $(echo "$exp" | bc -l)
答案2
您可以通过使用“here string”end删除两个来简化评论中的表达式echo
:
printf "%.3f\n" "$(bc -l <<< "$var")"
甚至
printf "%.3f\n" "$(bc -l <<< "5+50*3/20 + (19*2)/7")"
答案3
Python 似乎有你喜欢的行为:
$ echo 'print(round(' "5+50*3/20 + (19*2)/7" ', 3))' | python3
17.929
答案4
假设变量 $exp 在 shell 脚本中获取值 17.92857142857143,请使用以下行对其进行舍入并打印:
python2 -c 'print round('$exp',3)'