bash:如何round/floor/ceiling非小数的千位数?

bash: How to round/floor/ceiling non-decimals thousands number?

假设我这里有这个号码100675

如何变成101000

我在 google 上找到的所有解决方案都是解决小数问题。

bash shell 可以在内部进行计算,例如以下成绩单:

pax:~> for x in 100675 100499 100500 100999 101000; do
...:~>     ((y = (x + 500) / 1000 * 1000))
...:~>     echo "    $x becomes $y"
...:~> done
    100675 becomes 101000
    100499 becomes 100000
    100500 becomes 101000
    100999 becomes 101000
    101000 becomes 101000

此语句 ((y = (x + 500) / 1000 * 1000)) 首先将 500 添加 500 以将除以 1,000 的其他截断整数除以 舍入 除法,然后再将其乘以 1,000。

这是一个有点奇怪的功能,但这里有一个粗略的版本,可能是您需要的。至少这可以作为一个起点。

# in:
#   - the number to round
#   - the 10 power to round at. Defaults to 3 (i.e. 1000)
# output:
#  The rounded number
roundPow()
{
  local n=""
  local pow="${2:-3}"
  local div="$((10 ** pow))"
  echo "$((((n + div / 2) / div) * div))"
}

这是非常粗糙的边缘,它不是验证参数等,但应该给你一个基线。

希望对您有所帮助。