当我输入以下命令时:
result=$(( ($1-32)*(5/9) ))
echo $result
Run Code Online (Sandbox Code Playgroud)
变量 result 始终计算为整数,无论方程是否计算为十进制数。为什么是这样?
该bash壳本身只支持整数运算。特别是,由于 5 小于 9,(5/9)无论您的产品中的其他项如何,都将计算为零。
根据您的要求,您可以通过更改操作顺序来执行您想要的操作(仍然使用整数算术),即
$ bash -c 'echo $(( ($1-32)*(5/9) ))' bash 35
0
Run Code Online (Sandbox Code Playgroud)
如果你允许*并/拥有它们的自然优先级
$ bash -c 'echo $(( ($1-32)*5/9 ))' bash 35
1
Run Code Online (Sandbox Code Playgroud)
因为(35-32)*5是15,当整数除以9产生时1。如果你真的想浮点运算,那么你可以使用一个外部程序,如bc或awk如
$ bash -c 'echo "scale = 2; ($1-32)*(5/9)" | bc' bash 35
1.65
Run Code Online (Sandbox Code Playgroud)
或切换到支持浮点运算的外壳,例如ksh:
$ ksh -c 'echo $(( ($1-32)*5/9 ))' ksh 35.0
1.66666666666666667
Run Code Online (Sandbox Code Playgroud)
(注意使用参数35.0来强制浮点提升)。
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |