我使用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
之外?
答案 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")
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%