bash: Как округлить/пол/потолок недесятичных тысяч?

скажем, у меня есть этот номер здесь 100675

как превратить его в 101000

все решения, которые я нашел в Google, решают десятичные дроби.


person CuriousNewbie    schedule 19.06.2020    source источник


Ответы (2)


Оболочка bash может выполнять внутренние вычисления, например, со следующей расшифровкой:

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, чтобы превратить усеченное в противном случае целочисленное деление на 1000 в округление деления, а затем повторно умножает его на 1000.

person paxdiablo    schedule 19.06.2020

Это немного странная функция, но вот грубая версия, которая может вам понадобиться. По крайней мере, это может быть отправной точкой.

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

Это очень грубо по краям, это не проверка параметров и т. д., но должно дать вам базовый уровень.

Надеюсь это поможет.

person Marcio Lucca    schedule 19.06.2020
comment
спасибо за ответ, но извините, я предпочитаю ответ paxdiablo, потому что он такой легкий и просто работает - person CuriousNewbie; 19.06.2020
comment
Да, не беспокойтесь. - person Marcio Lucca; 19.06.2020