在Bash中使用算术扩展运算符时如何正确进行乘除运算
Shell算术计算异常原因
你遇到的问题核心是绝大多数POSIX标准的shell(包括Bash、Dash等默认环境)的算术扩展仅支持整数运算,所有小数运算结果会直接截断取整。你示例中的75 / 100在整数运算规则下会被计算为0,因此最终grade的结果始终为0,和写法格式无关。
解决方法
方案1:仅需要整数结果
调整运算顺序,先执行乘法再执行除法,避免中间步骤出现小于1的数值被截断:
# 算术扩展内可省略变量前的$符号,写法更简洁 grade=$(( x * y / 100 ))
该写法先计算25 * 75 = 1875,再除以100得到整数结果18,符合整数分值的计算需求。
方案2:需要保留小数精度
shell本身不支持浮点运算,需要调用外部计算工具实现:
- 使用
bc工具计算(可自定义小数位数):
# scale=2 表示保留2位小数,可根据需求调整数值 grade=$(echo "scale=2; $x * $y / 100" | bc)
计算结果为18.75。
- 使用
awk工具计算:
grade=$(awk -v x="$x" -v y="$y" 'BEGIN{printf "%.2f", x * y / 100}')
内容的提问来源于stack exchange,提问作者ShaheerL
相关产品推荐
相关产品推荐

