Приближение числа с плавающей запятой с правильным округлением

Как я могу аппроксимировать число с плавающей запятой, используя shell-скрипт (скажем, до 4 цифр после десятичной точки)? У меня есть два примера:

A=1.2345678 и B=1.2345678E-05 .

Поэтому я хотел бы получить A=1.2346 и B=1.2346E-05 .

Я могу сделать короткую работу для A , используя cut :

 A=`echo $A | cut -c1-6` 

Но это дает мне A=1.2345 где я ожидал, что последнее округление цифры будет 6 (так как следующая цифра больше 5). Также он работает только на одну цифру до десятичной точки (что, если я хочу приблизиться к 100.2345678 ?) То же самое касается и B

One Solution collect form web for “Приближение числа с плавающей запятой с правильным округлением”

Использовать printf :

 $ printf "%.4f\n" "$A" 1.2346 $ printf "%.4f\n" "$B" 0.0000 $ printf "%.4e\n" "$B" 1.2346e-05 $ printf "%.14f\n" "$B" 0.00001234567800 $ printf "%.4g\n" "$B" 1.235e-05 $ printf "%.4g\n" "$A" 1.235 

Поскольку %e может изменить экспоненту, чтобы быть уверенным в том, что она будет одинаковой, вы можете использовать функции обработки строк в оболочке, чтобы отделить число от экспоненты и распечатать каждый отдельно:

 $ B=100.12345678E-05 $ printf '%.5fE%s\n' "${B%E*}" "${B##*E}" 100.12346E-05 

${B%E*} печатает все до 1-го E и ${B##*E} – это все после первого E

  • верхний не работает
  • Как использовать sudo -i в сценарии оболочки
  • Еще одна команда без ключа
  • Отправить копию вывода скрипта в файл
  • Каков самый быстрый способ обработки строки за строкой в ​​bash?
  • Разделение текстового файла на новые файлы
  • Выход прерывается при добавлении вывода sql-запроса в ksh
  • Преобразование координат GPS с помощью сценария bash
  • Как выполнить как зарегистрированный пользователь в скрипте sudo (OSX)?
  • Как подсчитать подпроцессы, достигшие определенного состояния
  • Bash итерация по парам файлов
  • Linux и Unix - лучшая ОС в мире.