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")
- 不要使用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%
我使用 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")
- 不要使用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%