Я считал цену из ввода данных пользователем. Когда я умножаю вход с интервалом как это
T =
"$((PRICE*QTY))"|bc
; дает строку 272: 12.00: синтаксическая ошибка: недопустимый арифметический оператор (ошибочный маркер ".00"), или.50
в зависимости от ввода данных пользователем. Как я умножаю эти две переменные и получаю общее количество с 2 десятичными точками?
это работает:
PRICE=1.1
QTY=21
RES=$(echo "scale=4; $PRICE*$QTY" | bc)
echo $RES
Во-первых, попытка выполнить арифметику с плавающей запятой с помощью bc (1)
без использования флага -l
обязательно даст вам несколько забавных ответов:
sarnold@haig:~$ bc -q
3.5 * 3.5
12.2
sarnold@haig:~$ bc -q -l
3.5 * 3.5
12.25
Во-вторых, ] $ ((...))
- это попытка выполнять арифметические операции в вашей оболочке; ни мой bash
, ни тире
не могут обрабатывать числа с плавающей запятой.
Если вы хотите выполнять арифметические операции в своей оболочке, обратите внимание на printf (1)
, а также (возможно) на встроенную в оболочку функцию printf
. Если вы хотите выполнять арифметические операции в bc, обратите внимание на специальную переменную scale
.
var=$(echo "scale=2;$PRICE*$QTY" |bc)
Вы также можете использовать awk
awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}'