2010-07-19 6 views
6

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

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

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

+0

WOW! Это хорошо! Я никогда не видел таких ответов быстро на любых других форумах независимо от того, насколько они активны, и в основном получают ответы «мы не будем выполнять ваши задания для вас». Это сработало для меня T = 'echo $ QTYS \ * $ PRICE | bc'; Его также округляет цену до 2 десятичных знаков без масштаба. По какой-то причине только цена * QTY давала мне команду, не найденную ошибку. – svenus

+0

Следует помнить, что у bash действительно нет каких-либо типов данных, кроме строк. Каждая переменная сводится к строке, поэтому она может помочь вам запомнить это. Различные программы, конечно, будут обрабатывать определенные строки особым образом. – Daenyth

ответ

2
T="$(echo "$PRICE*$QTY" | bc)" 
+0

i get (standard_in) 2: ошибка синтаксиса idk why. его почти то же самое, что и выше – svenus

+0

@svenus: Этот работает для меня. Я не знаю, почему вы получаете эту ошибку из 'bc'. –

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

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

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

./menu3.sh: строка 278: 12.25: синтаксическая ошибка: недействительный арифметический оператор (токен ошибки «.25») – svenus

+0

удаляет '$ (())'. bash не делает плавающей арифметики. Если вы хотите установить 2 десятичных знака, используйте scale = 2 – ghostdog74

+0

Вам нужно значки доллара перед каждым именем переменной. –

13

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


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

ha !! Это тоже работает! Я пропустил эхо. Благодаря! – svenus

0

Во-первых, пытается сделать арифметику с плавающей точкой с bc(1) без использования -l флаг является оценка чтобы дать вам несколько смешных ответов:

[email protected]:~$ bc -q 
3.5 * 3.5 
12.2 
[email protected]:~$ bc -q -l 
3.5 * 3.5 
12.25 

Во-вторых, $((...)) - попытка сделать арифметику в вашей оболочке; ни мой bash, ни dash не могут обрабатывать числа с плавающей запятой.

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

+0

Большая часть $ (()) с bc я пытался дал мне ошибки. Должно быть из-за (())? Спасибо за разъяснения. – svenus