BC 刻度舍入误差

BC 刻度舍入误差

尝试截断计算的值bc,但是当我设置它时,scale=0整个计算返回 0。设置scale=1返回正确值 357.3,但scale=0始终返回 0。

这是一个计算示例:

echo "scale=0; 3573 * (10 / 100)/1" | bc -l
0

echo "scale=1; 3573 * (10 / 100)/1" | bc -l
357.3

这不是使用将浮点数截断为整数的正确方法吗bc?我想将其作为整数用于 bash 脚本编写。谢谢!

答案1

我们使用操作顺序的其他输出:

echo "scale=0; 3573 * 10 / 100" | bc -l   # 357
echo "scale=0; 3573 / 100 * 10" | bc -l   # 350

答案2

使用起来awk似乎更加简单,

awk 'BEGIN { print int(3573 * (10/100)/1) }'
357

答案3

@Paul_Pedant 有正确的想法scale适用于计算的每个部分。 10 / 100 = 0(比例为 0):

$ bc <<< 'scale = 0; 10 / 100'
0

所以整个计算结果都是0。

答案4

使用printf

$ LC_ALL=C printf "%.0f\n" $(echo "3573 * (10 / 100)/1" | bc -l)
357

相关内容