我有一个表达式"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)'