[确定,所以我试图对17.92857
的输入进行四舍五入,以使其在bash中获得17.929
的输入。
到目前为止,我的代码是:
read input
echo "scale = 3; $input" | bc -l
但是,当我使用它时,它没有四舍五入,它返回17.928
。
有人知道对此有任何解决方案吗?
[如果input
包含数字,则不需要bc
这样的外部命令。您可以只使用printf
:
printf "%.3f\n" "$input"
Edit:如果输入为公式,则应像以下命令之一一样使用bc
:
printf "%.3f\n" $(bc -l <<< "$input")
printf "%.3f\n" $(echo "$input" | bc -l)
为了扩展蒂姆的答案,您可以为此编写一个shell帮助器函数round ${FLOAT} ${PRECISION}
:
#!/usr/bin/env bash
round() {
printf "%.${2}f" "${1}"
}
PI=3.14159
round ${PI} 0
echo
round ${PI} 1
echo
round ${PI} 2
echo
round ${PI} 3
echo
round ${PI} 4
echo
round ${PI} 5
echo
round ${PI} 6
echo
# Outputs:
3
3.1
3.14
3.142
3.1416
3.14159
3.141590
# To store in a variable:
ROUND_PI=$(round ${PI} 3)
echo ${ROUND_PI}
# Outputs:
3.142
一个小技巧是将0.0005
添加到您的输入中,这样您就可以正确地将数字四舍五入。
如果您收到的舍入错误为数字17.928,请尝试以下操作:读yv =echo "scale = 3; $y" |bc -l
如果[$ v == 17.928];然后回声“ 17.929”其他回声$ vfi