как сделать bc, чтобы показать мне 10, а не 10.00

#!/bin/bash q=$(bc <<< "scale=2;$p*100") head -n$q numbers.txt > secondcoordinate.txt 

Это всего лишь часть сценария, но я думаю, что этого достаточно, чтобы прояснить мои намерения. p – переменная с двумя десятичными запятыми, поэтому q должно быть целым числом … Тем не менее, bc показывает, например, 10.00 вместо 10 .

Как я могу это решить?

  • Как избежать обертывания в выходе bc
  • Понять «ibase» и «obase» в случае конверсий с bc?
  • Как показать ноль до десятичной точки в bc?
  • BC не обрабатывает масштаб = 0 правильно
  • Ошибка синтаксиса, сравнивающая поплавки с bc
  • Как получить bc для начала десятичных дробей с начальным нулем
  • Работа с поплавком с bc?
  • Какая цифра для базы больше 16 в bc?
  • 3 Solutions collect form web for “как сделать bc, чтобы показать мне 10, а не 10.00”

    Вы не можете сделать это с очевидным scale=0 из-за того, как определяется масштаб.

    Документация косвенно объясняет, что деление на единицу достаточно для сброса вывода в соответствии со значением scale , которое по умолчанию равно нулю:

    expr1 / expr2 . Результатом выражения является фактор двух выражений. Масштабы результата – это значение переменной шкалы.

     p=12.34; echo "($p*100)" | bc 1234.00 p=12.34; echo "($p*100)/1" | bc 1234 

    Если ваша версия bc не справляется с этим, проведите ее через sed :

     p=12.34; echo "($p*100)" | bc | sed 's!\.0*$!!' 1234 

    Этот RE будет только отбрасывать конечные нули из целого числа. Так что 3.00 уменьшится до 3, но 3.10 не уменьшится до 3.1. Если вам действительно нужна полная возможность сбрасывать конечные нули из десятичного числа, требуется PCRE:

     p=12.34; echo "($p*100)" | bc | perl -pe '/\./ && s/0+$/$1/ && s/\.$//' 

    Но если вы собираетесь использовать perl тогда вы можете обойтись без bc в первую очередь:

     p=12.34; perl -e '$p = shift; print $p * 100, "\n"' "$p" 

    вы можете использовать awk для вычисления значений

     bash-3.2$ p=0.01 bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}') bash-3.2$ echo $q 1 bash-3.2$ p=0.02 bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}') bash-3.2$ echo $q 2 bash-3.2$ p=0.022 bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}') bash-3.2$ echo $q 2.2 

    TL; DR

    У вас много вариантов. bc знает поведение, когда scale=0 не всегда делает то, что вы ожидаете, но есть много обходных решений. Здесь только несколько.

    Printf

    Используйте printf для ограничения вывода на целые числа.

     $ printf "%g\n" $(echo '12.34 * 100' | bc) 1234 

    bc с делением

    Если вы хотите придерживаться масштабирования bc , вам нужно указать как шкалу нуля, так и разделить на 1, чтобы сбросить масштаб. Это известное поведение, но я действительно не могу объяснить, почему.

     $ echo '12.34 * 100 / 1' | scale=0 bc 1234 

    СЕПГ

    Просто удалите ненужные завершающие символы.

     $ echo '12.34 * 100' | bc | sed 's/\.00$//' 1234 

    удар

    Используйте расширение скобки, чтобы вернуть значение до десятичного знака.

     $ p='12.34'; q=$(bc <<< "scale=2; $p*100"); echo ${q%%.00} 1234 
    Interesting Posts

    Почему стиль select-word останавливает меня от использования слова «назад-убить» для ведущих пробелов?

    lofiadm: пароль через скрипт

    ZSH: вставить завершение на первой вкладке, даже если оно неоднозначно?

    Как постоянно устанавливать положение и порядок экрана в Fedora 25?

    Как включить двоеточие в конкретную запись команды sudoers?

    Печатать случайные строки в соответствии с порядком исходного файла

    Код Unix, который возвращает первый номер

    Как привести текст HEREDOC в переменную сценария оболочки?

    Общие сведения о Linux Perf sched-switch и контекстных переключателях

    Новый пользователь с корневым доступом в Linux Debian

    Попытка перезапустить apache с помощью Vagrant – «Ошибка конфигурации apache2»

    Получение ZFS для отображения физических дисков в zpool

    Ncurses over ssh – будут ли они отображаться?

    Как вы можете получить текущую терминальную строку (ту, которая все еще доступна для редактирования пользователем)?

    Как настроить Unbound для использования DNSSEC?

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