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

Как я могу аппроксимировать число с плавающей запятой, используя 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 (OSX)?
  • Создание справки для цикла для zip-файлов с определенным суффиксом и расширением
  • Цитирование вывода команды backtick
  • Как я могу поддерживать разрывы строк в тексте тела с mailx при отправке вложений?
  • Скрипт сопоставляет буквенный шаблон по нескольким строкам?
  • Как использовать функцию return в качестве условия if, а затем shortcut?
  • Задание CRON для выполнения команды с низкой памятью
  • Как ssh в удаленном ящике, запустите команду и продолжайте ее работу после отключения
  • Interesting Posts

    разделять файл, передавать каждую часть в качестве параметра скрипту, запускать каждый скрипт параллельно

    Как эхо-строку с несколькими пробелами в bash «нетронутой»?

    BATMAN работает с кабелем, а не с беспроводным

    Debian VPN pptp-linux не сохраняет учетные данные

    Значки панели инструментов не могут загружаться при запуске Emacs через xhost из FreeBSD в Ubuntu

    При добавлении IP-адресов с ifconfig eth: xx, как мне в одной строке найти наивысший eth: xx

    Каков предел на нет. из разделов, которые у меня есть?

    Странная задержка / временное замораживание при запуске / использовании xterm

    История-поиск в zsh работает только для команд?

    Могу ли я определить исключительное использование пространства для групп подвоев btrfs?

    Датчик окружающего света Samsung Series 9

    telnet-доступ к веб-сайту с аутентификацией

    Что делать после паники ядра в AIX?

    Назначение каталога автозапуска-скриптов

    Очередь нескольких видео из Bash Script

    Linux и Unix - лучшая ОС в мире.