Bash - 不带小数点的 echo 百分比与 bc 命令返回的结果

Bash - echo percentage with no decimal point with result returned from bc command

我使用 bc 进行简单的百分比计算。我想要做的是以整数格式打印出百分比,例如:

Compression ratio: 72%

这是我正在做的事情:

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

产生以下输出:

Compression ratio: 72.00%

我知道问题的原因,即 scale=2。将其更改为 scale=0 会导致 $output_size / $input_size(即 0.72)在乘以 100 之前四舍五入为 0,这会导致不良输出。

我试过这些但没有用:

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

如何正确地将 * 100 放在 bc 之外?

不要使用回声。 Printf 允许您指定格式字符串:

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

使用shellbuilt-in整数运算:

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

使用 bc 计算器和 flating-point 数字格式 env printf (1) :

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

  1. 不要使用Bash built-in printf '%f' ${value}格式化floating-point数字,因为它需要根据环境变量[=]格式化value 16=] 而不是接受 POSIX 格式。

你可以试试这个方法:

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

输出:

Compression ratio: 114%