当我输入以下命令时:
result=$(( ($1-32)*(5/9) ))
echo $result
变量 result 的计算结果始终为整数,无论方程式的计算结果是否为小数。这是为什么?
答案1
shellbash
本身仅支持整数运算。具体来说,由于 5 小于 9,因此(5/9)
无论乘积中的其他项如何,其结果都为零。
根据您的要求,您可以通过改变运算顺序来做您想做的事情(仍然使用整数运算),即
$ bash -c 'echo $(( ($1-32)*(5/9) ))' bash 35
0
如果你允许*
并/
有其自然优先权
$ bash -c 'echo $(( ($1-32)*5/9 ))' bash 35
1
因为(35-32)*5
是15
,将其整数除以得到9
。1
如果你真的想要浮点运算,那么你可以使用外部程序,例如bc
或awk
例如
$ bash -c 'echo "scale = 2; ($1-32)*(5/9)" | bc' bash 35
1.65
或者切换到支持浮点运算的 shell,例如ksh
:
$ ksh -c 'echo $(( ($1-32)*5/9 ))' ksh 35.0
1.66666666666666667
(注意使用参数35.0
来强制浮点提升)。