Bash:
数字取整

如何进行:

以下是在 Bash 中进行四舍五入的方法:

# 使用 'floor' 与 bc 命令向下取整
echo "scale=0; 3.49/1" | bc

# 使用 'ceiling' 与 bc 命令向上取整
echo "scale=0; 3.01/1" | bc -l

# 使用 printf 向最近的整数四舍五入
printf "%.0f\n" 3.49

# 使用 bc 的技巧实现向最近的整数四舍五入
echo "(3.49+0.5)/1" | bc

来自终端的样本输出:

3  # 向下取整(地板)
4  # 向上取整(天花板)
3  # 四舍五入(使用 printf)
3  # 四舍五入(使用 bc)

深入探讨

早期,Bash 脚本中没有 bcprintf 来进行数学运算。老派程序员不得不依赖外部工具或巧妙的解决方案。现在,bc 使您能够进行精确的数学运算。请记住,默认情况下 bc 不进行四舍五入——它执行的是向下取整。Scale 部分设置了小数点的操作。

有替代方案吗?您可以使用 awk 进行四舍五入,而不需要切换到 bc,或者用 perl 解决更复杂的数学需求。对于喜欢折磨自己的人,可以尝试使用纯 Bash,比如,迭代字符串操作——但为什么呢?

至于详细情况,bc 不仅仅是四舍五入,它还能做大量的数学操作——缩放它,正弦它,开方它,你说出来的都能做。至于 printf,它更多是关于格式化文本,但嘿,它也能四舍五入数字,所以我们不抱怨。

另请参阅

对于那些渴望了解更多的人:

  • GNU bc 手册:https://www.gnu.org/software/bc/manual/html_mono/bc.html
  • Bash printf 命令:https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-printf
  • AWK 用户指南(用于四舍五入和其他文本处理):https://www.gnu.org/software/gawk/manual/gawk.html
  • 更多 Bash 数学、脚本和数字技巧:https://mywiki.wooledge.org/BashFAQ/022