Bash - процент эха без десятичной точки с результатом, возвращенным из команды bc - PullRequest
0 голосов
/ 09 июля 2019

Я использую bc для простого расчета процента.Я пытаюсь распечатать процент в целочисленном формате, например:

Степень сжатия: 72%

Вот что я делаю:

echo "Compression ratio: $(bc <<< "scale=2; $output_size / $input_size * 100")%";

, который производит следующий вывод:

Степень сжатия: 72,00%

Я знаю причину проблемы, которая была scale=2.Изменение его на scale=0 приводит к тому, что $output_size / $input_size, что составляет 0,72, округляется до 0, а затем умножается на 100, что приводит к нежелательному выводу.

Я пробовал это, но они не работали:

echo "Compression ratio: $(bc <<< "scale=2; $output_size / $input_size" * 100)%";
echo "Compression ratio: $((bc <<< "scale=2; $output_size / $input_size" * 100))%";

Как правильно поставить * 100 вне bc?

Ответы [ 3 ]

2 голосов
/ 09 июля 2019

Не используйте эхо. Printf позволяет вам указать строку формата:

printf "Compression ratio: %2.0f%%\n" "$(bc <<< "scale=2; $output_size / $input_size * 100")"
0 голосов
/ 09 июля 2019

Вы можете попробовать этот подход:

echo "Compression ratio: $(bc <<< "scale=2; x = 8 / 7 * 100; scale = 0; x / 1")%";

Вывод:

Compression ratio: 114%
0 голосов
/ 09 июля 2019

Использование встроенной в оболочку целочисленной арифметики:

echo "Compression ratio: $(((100*output_size)/input_size))%"

Использование bc калькулятора и формата чисел с плавающей точкой с env printf (1):

env printf "Compression ratio: %.0f%%\n" $(bc <<< "scale=2; $output_size / $input_size * 100")

  1. Не используйте встроенный в Bash printf '%f' ${value} для форматирования чисел с плавающей запятой, потому что он требует форматирования value в соответствии с переменной среды LC_NUMERIC, а не принятия формата POSIX.
...