price=22.22
qty=33
let "total_sales=$price*$qty"
它给了我一个错误
无效的算术运算符
无论如何我可以将这两个值相乘吗?
答案 0 :(得分:1)
使用awk
进行浮点运算,因为某些shell(包括bash
)不支持浮点运算。
awk -v price=22.22 -v qty=33 'BEGIN{total_sales=(price*qty); print total_sales;}'
733.26
或者)如果你的变量是在shell中定义的,你可以将它们导入Awk
,如下所示。请注意,shell
和awk
下的变量不同。
price="22.22"
qty="33"
awk -v price="${price}" -v qty="${qty}" 'BEGIN{total_sales=(price*qty); print total_sales}'
733.26
将其存储在变量
中price="22.22"
qty="33"
unset total_sales
total_sales=$(awk -v price="${price}" -v qty="${qty}" 'BEGIN{print (price*qty)}')
答案 1 :(得分:1)
您的代码不起作用,因为shell算法不支持浮点运算。
如果你想避免必须调用一个外部程序(在那些必须完成大量计算的情况下效率非常低),你可以使用整数运算来得到解决方案。
首先,将每个操作数乘以10的幂,足以摆脱小数部分。在这种情况下,将22.22乘以100.此步骤可以推广到根据数字位数自动建立适当的因子,或者您可以简单地使用10的大因数,并确保您的数字后面没有数字。小数点,你可以处理。
X=2222
Y=33
FACTOR=100
然后将X乘以Y,得到73326。
A=$(($X * $Y))
然后使用/
运算符将73326除以上面使用的100因子。得到733,结果的整数部分。
B=$(( $A / $FACTOR ))
然后使用modulo(整数除法余数)运算%
来得到余数,这将是你的小数部分。
C=$(( $A % $FACTOR ))
最后的结果就是:
R="$B.$C"
你可以把它表达为一行:
X=2222
Y=33
FACTOR=100
RESULT=$((X*Y/FACTOR)).$((X*Y%FACTOR))