Умножение Баш на Умножение на int - PullRequest
8 голосов
/ 19 июля 2010

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

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

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

Ответы [ 5 ]

15 голосов
/ 19 июля 2010

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


PRICE=1.1
QTY=21
RES=$(echo "scale=4; $PRICE*$QTY" | bc)
echo $RES
5 голосов
/ 19 июля 2010
var=$(echo "scale=2;$PRICE*$QTY" |bc)

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

awk -vp=$PRICE -vq=$QTY 'BEGIN{printf "%.2f" ,p * q}'
3 голосов
/ 19 июля 2010
T="$(echo "$PRICE*$QTY" | bc)"
1 голос
/ 27 апреля 2018

Вы можете использовать mul = 0.8 exp = 200 texp = awk -vp=$mul -vq=$exp 'BEGIN{printf "%.2f" ,p * q}'

Надеюсь, это сработает.

0 голосов
/ 19 июля 2010

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

Если вы хотите выполнить арифметику в вашей оболочке, обратите внимание printf(1), а также (возможно) встроенную в вашу оболочку printfфункция.Если вы хотите сделать арифметику в bc, обратите внимание на специальную переменную scale.

...