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
, більше йдеться про форматування тексту, але гей, воно округлює числа, тож ми не скаржимося.
Див. також
Для тих, хто хоче дізнатися більше:
- 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