Bash-不带小数点的回显百分比,其结果从bc命令返回

时间:2019-07-09 03:57:26

标签: bash bc

我使用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)在与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之外?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

使用shell内置的整数算法:

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

通过bc(1)使用env printf计算器和展平点数字格式:

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

  1. 请勿使用Bash内置的printf '%f' ${value}格式化浮点数,因为它要求value根据环境变量LC_NUMERIC进行格式化,而不是接受POSIX格式。

答案 2 :(得分:0)

您可以尝试这种方法:

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

输出:

Compression ratio: 114%