как сделать 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 .

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

  • Какая цифра для базы больше 16 в bc?
  • Как показать ноль до десятичной точки в bc?
  • Понять «ibase» и «obase» в случае конверсий с bc?
  • Работа с поплавком с bc?
  • BC не обрабатывает масштаб = 0 правильно
  • Как получить bc для начала десятичных дробей с начальным нулем
  • Ошибка синтаксиса, сравнивающая поплавки с bc
  • Как избежать обертывания в выходе 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

    Терминал Linux пропускает некоторые (повторяющиеся / пробельные) символы

    Монетный двор 18.1 Проводная сеть не работает

    Как проверить прогресс при клонировании диска с помощью `dd`?

    Просмотр физического расположения файла / каталога на жестком диске

    Преобразовать .csv в 3 столбца и строку

    Как изменить программу «чтения» по умолчанию?

    $ _ не работает с командами копирования и перемещения

    получить переданные аргументы и поместить их в массив

    Бесконечно вложенные каталоги внутри / usr / bin / X11

    Удаленный SSH-туннель, не работающий с сертификатами

    В чашках можете ли вы сохранить все журналы печати, отменив все задания печати?

    Настроить Невозможно записать журналы в другой файл на управляемых серверах

    Пользовательский системный процесс на debian медленно запускается

    Расширение Shell glob после замены переменной цикла

    не удается создать / dev / shm

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