Как округлить или преобразовать значение float в int с помощью bc? получение: "(standard_in) 1: синтаксическая ошибка"

Я получу значение как 2743410360.320, и я хочу значение, подобное 2743410360, переменной.

Я пытался

INTValueOfGB=$ echo "($gb+0.5)/1" | bc 

Но я получаю (standard_in) 1: syntax error

4 Solutions collect form web for “Как округлить или преобразовать значение float в int с помощью bc? получение: "(standard_in) 1: синтаксическая ошибка"”

Вы можете использовать printf для округления:

 $ printf "%.0f" 2743410360.320 
 $ p=2743410360.320 $ echo $p 2743410360.320 $ echo ${p%%.*} 2743410360 

Я не вижу ответа на проблему @ vin, а именно:

Но я получаю (standard_in) 1: syntax error

Команда bc печатает (standard_in) 1: syntax error так как переменная оболочки gb не установлена:

 $ unset gb $ echo "($gb+0.5)/1" | bc (standard_in) 1: syntax error $ gb=2743410360.320 $ echo "($gb+0.5)/1" | bc 2743410360 

В комментариях к ответу @ dchirikov @vin говорит, что printf "%.0f" «не работает»:

 $ unset gb $ printf '%.0f\n' $gb 0 $ gb=2743410360.320 $ printf '%.0f\n' $gb 2743410360 

В обеих областях, где @vin имеет проблемы, неустановленная переменная воспроизводит проблему, и установка переменной решает проблему.

Для вашей команды требуется пара ( ) :

 INTValueOfGB=$( echo "($gb+0.5)/1" | bc ) 

Но это не будет округлять число, для этого вам нужно установить масштаб на 0:

 INTValueOfGB=$( echo "scale=0;($gb+0.5)/1" | bc ) 

Это округляет (от x.5) до следующего целого.

Чтобы получить «round to next even integer» (правило Banker), вам нужно использовать округление printf:

 LC_NUMERIC=C printf "%.0f" 2743410360.320 

LC_NUMERIC должен обеспечить, чтобы числа обрабатывались с точкой как десятичной. Это не то, что пользователи в Германии хотели бы использовать, это должно работать с десятичными знаками с:

 $ LC_NUMERIC=de_DE.utf8 printf "%.0f" 2743410360,320 2743410360 
  • как использовать syslog, чтобы избежать искажения файла журнала, когда несколько процессов просматривают один и тот же файл журнала?
  • Итерация по нескольким файлам в папке и присвоение значения
  • Выравнивание выходного файла скрипта Bash
  • Могу ли я обновить свои команды (например, awk, sed) до последней версии в Solaris?
  • Как использовать afl-fuzz (American Fuzzy Lop) с openssl
  • Как создать список элементов под определенными заголовками в текстовом документе? (Linux / Bash)
  • Совпадение шаблонов
  • Подводя массив внутри awk?
  • Сценарий Bash SFTPing на удаленный сервер и загрузка файлов, cd в соответствующий каталог на локальной машине
  • Исходное перенаправление bash - в чем разница между >> и> &, перенаправлением и дублированием?
  • Shell: как использовать 2 переменные с условием
  • Выйти из bash, когда find попадает в папку с разрешенным разрешением
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.