我从用户输入中读取价格。当我像这样将输入与int相乘:
T=
"$((PRICE*QTY))"|bc
;会给出 line 272: 12.00: syntax error: invalid arithmetic operator (error token is ".00") 或 .50
取决于用户的输入。如何将这两个变量相乘并得到保留2位小数的总和?
我从用户输入中读取价格。当我像这样将输入与int相乘:
T=
"$((PRICE*QTY))"|bc
;会给出 line 272: 12.00: syntax error: invalid arithmetic operator (error token is ".00") 或 .50
取决于用户的输入。如何将这两个变量相乘并得到保留2位小数的总和?
这个有效:
PRICE=1.1
QTY=21
RES=$(echo "scale=4; $PRICE*$QTY" | bc)
echo $RES
scale
的用法吗?scale=4
是什么意思? - Codervar=$(echo "scale=2;$PRICE*$QTY" |bc)
你也可以使用awk。
awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}'
$(())
。Bash 不支持浮点数运算。如果您想设置 2 位小数,请使用 scale=2。 - ghostdog74T="$(echo "$PRICE*$QTY" | bc)"
您可以使用以下代码:
texp=`awk -vp=$mul -vq=$exp 'BEGIN{printf "%.2f" ,p * q}'`
希望这个能够正常工作。
首先,在不使用-l
标志的情况下,尝试使用bc(1)
进行浮点运算肯定会给你一些奇怪的答案:
sarnold@haig:~$ bc -q
3.5 * 3.5
12.2
sarnold@haig:~$ bc -q -l
3.5 * 3.5
12.25
其次,$((...))
是在您的 shell 中尝试进行算术运算的方式;我的 bash
和 dash
都无法处理浮点数。
如果您想在 shell 中进行算术运算,请注意使用 printf(1)
以及(可能)您的 shell 内置的 printf
函数。如果您想在 bc 中进行算术运算,请注意特殊变量 scale
。
echo $QTYS\* $PRICE | bc
; 它还将价格四舍五入到小数点后两位而不需要比例。由于某种原因,只是price*QTY给我带来了命令未找到的错误。 - svenus