Десятичное число Умножения Bash к интервалу

Я считал цену из ввода данных пользователем. Когда я умножаю вход с интервалом как это

T ="$((PRICE*QTY))"|bc; дает строку 272: 12.00: синтаксическая ошибка: недопустимый арифметический оператор (ошибочный маркер ".00"), или.50

в зависимости от ввода данных пользователем. Как я умножаю эти две переменные и получаю общее количество с 2 десятичными точками?

8
задан svenus 19 July 2010 в 09:41
поделиться

4 ответа

это работает:


PRICE=1.1
QTY=21
RES=$(echo "scale=4; $PRICE*$QTY" | bc)
echo $RES
15
ответ дан 5 December 2019 в 06:52
поделиться

Во-первых, попытка выполнить арифметику с плавающей запятой с помощью 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 .

0
ответ дан 5 December 2019 в 06:52
поделиться
var=$(echo "scale=2;$PRICE*$QTY" |bc)

Вы также можете использовать awk

awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}'
5
ответ дан 5 December 2019 в 06:52
поделиться
T="$(echo "$PRICE*$QTY" | bc)"
3
ответ дан 5 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: