Bash将小数乘以整数

15

我从用户输入中读取价格。当我像这样将输入与int相乘:

T="$((PRICE*QTY))"|bc;会给出 line 272: 12.00: syntax error: invalid arithmetic operator (error token is ".00") 或 .50

取决于用户的输入。如何将这两个变量相乘并得到保留2位小数的总和?


哇!这太好了!我从来没有在其他论坛上看到过如此快速的回复,无论它们有多活跃,大多数都是“我们不会为你完成作业”的回复。这对我很有效 T=echo $QTYS\* $PRICE | bc; 它还将价格四舍五入到小数点后两位而不需要比例。由于某种原因,只是price*QTY给我带来了命令未找到的错误。 - svenus
需要记住的一件事是,Bash 实际上除了字符串之外没有任何数据类型。每个变量都归结为一个字符串,因此这可能有助于您记住它。当然,不同的程序会以特殊的方式处理某些字符串。 - Daenyth
5个回答

23

这个有效:


PRICE=1.1
QTY=21
RES=$(echo "scale=4; $PRICE*$QTY" | bc)
echo $RES

你能解释一下这里 scale 的用法吗?scale=4 是什么意思? - Coder

13
var=$(echo "scale=2;$PRICE*$QTY" |bc)

你也可以使用awk。

awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}'

./menu3.sh: 第278行:12.25:语法错误:无效的算术运算符(错误标记为“.25”) - svenus
删除 $(())。Bash 不支持浮点数运算。如果您想设置 2 位小数,请使用 scale=2。 - ghostdog74
每个变量名前都需要加上美元符号。 - Dennis Williamson
var=$(echo "scale=2;$PRICE*$QTY" |bc) 给我返回了(standard_in) 2: 语法错误 - svenus
某些发行版上未安装bc。我点赞了这个回答,因为awk是通用的,并且他提供了一个更适用于*nix系统的awk版本! - Nick Hatfield

4
T="$(echo "$PRICE*$QTY" | bc)"

我收到了(standard_in)2:语法错误的错误信息,不知道为什么。它几乎与上面的相同。 - svenus
@svenus:这个对我有效。我不知道为什么你会从“bc”获得那个错误。 - Dennis Williamson

2

您可以使用以下代码:

texp=`awk -vp=$mul -vq=$exp 'BEGIN{printf "%.2f" ,p * q}'`

希望这个能够正常工作。


注:mul表示乘数,exp表示指数。

1
请编辑您的答案。它是正确的,但格式不正确。 - elyalvarado

1

首先,在不使用-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 中尝试进行算术运算的方式;我的 bashdash 都无法处理浮点数。

如果您想在 shell 中进行算术运算,请注意使用 printf(1) 以及(可能)您的 shell 内置的 printf 函数。如果您想在 bc 中进行算术运算,请注意特殊变量 scale


大多数使用 $(( )) 的 bc 命令都会出现错误。这是因为 (( )) 的原因吗?感谢您的澄清。 - svenus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接