Округление чисел

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  # Округлено вниз (floor)
4  # Округлено вверх (ceiling)
3  # Округлено до ближайшего целого (с помощью printf)
3  # Округлено до ближайшего целого (через bc)

Погружение в Детали

В старину в скриптах Bash не было bc или printf для выполнения математических чудес. Предшественникам приходилось полагаться на внешние инструменты или изощрённые обходные пути. Теперь bc позволяет выполнять вычисления с точностью. Имейте в виду, bc по умолчанию не округляет — он приводит к нижнему целому. Часть scale устанавливает действия с десятичной точкой.

Альтернативы? Вы можете использовать awk для округления без переключения на bc или возиться с perl для более серьёзных математических потребностей. Для мазохистов — чистый Bash, скажем, с итеративной манипуляцией со строками — но зачем?

Что касается деталей, bc не только округляет, он выполняет массу математических операций — масштабирует, вычисляет синус, корень, назовите любое действие. Что касается printf, это больше о форматировании текста, но, эй, он округляет числа, так что мы не жалуемся.

См. Также

Для тех, кто хочет узнать больше: