bash: Как округлить / пол / потолок недесятичные числа? - PullRequest
0 голосов
/ 19 июня 2020

, допустим, у меня здесь есть этот номер 100675

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

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

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Оболочка 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.

0 голосов
/ 19 июня 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))"
}

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

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

...