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