我如何在shell中乘以小数点

时间:2017-01-17 11:12:01

标签: shell

price=22.22
qty=33
let "total_sales=$price*$qty"

它给了我一个错误

  

无效的算术运算符

无论如何我可以将这两个值相乘吗?

2 个答案:

答案 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,如下所示。请注意,shellawk下的变量不同。

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))