如何在命令行上正确舍入 IEEE 754 浮点数?
我想指定输出数字的精度 - 小数位数。
例如,四舍五入6.66到精度1应该给出6.7。更多见下表:
Value Precision Rounded
6.66 0 7
6.66 1 6.7
6.66 2 6.66
6.66 3 6.660
6.666 3 6.666
6.6666 3 6.667
Run Code Online (Sandbox Code Playgroud)
它应该可以在交互式 shell 中使用,但理想情况下足够健壮,可以在生产 shell 脚本中使用它。
上下文是有 2 个变量被划分为浮点结果,如下所示:
printf "%0.5f\n" $(echo 305/15 | bc -l)
20.33333
Run Code Online (Sandbox Code Playgroud)
我怎样才能总是四舍五入到下一个整数,即21?这不是将大于 20.5 的值向上舍入到 21,即最接近的整数。我问是因为我想要一个值要么是整数,要么是下一个整数,如果它以任何方式高于。那我该如何评价呢?用if声明?如果我在那里放一个浮点数,shell 会抱怨它需要一个整数。我不完全了解如何利用信息的Q&A,如这一个为实现转换“向上”到下一个整数。我错过了什么?
#!/bin/sh
if [ $num -eq 9 -o $num -eq 75 -o $num -eq 200 ]; then
echo "do this"
elif [ $num -eq 40 -o $num -eq 53 -o $num -eq 63]; then
echo "do something for this"
else
echo "for other do this"
fi
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以缩小if语句中的表达式?也许像
[ $num -eq (9,75,200) ]
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我在这个操作系统上没有 GNU 实用程序。