2010-07-19 16 views
6

Ho letto il prezzo dall'input dell'utente. Quando moltiplico l'ingresso con int similiBash Multiplying Decimal to int

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

seconda input dell'utente. Come posso moltiplicare queste due variabili e ottenere un totale con 2 punti decimali?

+0

WOW! Questo è buono! Non ho mai visto risposte così veloci in nessun altro forum, non importa quanto siano attivi e, per lo più, ricevo risposte "non eseguiremo il tuo incarico per te". Questo ha funzionato per me T = 'echo $ QTYS \ * $ PREZZO | bc'; Il suo prezzo di arrotondamento anche a 2 cifre decimali senza scala. Per qualche ragione, solo il prezzo * QTY mi dava un errore di comando non trovato. – svenus

+0

Una cosa da ricordare è che bash non ha veramente alcun tipo di dati tranne le stringhe. Ogni variabile arriva a una stringa, quindi potrebbe aiutarti a ricordarlo. Naturalmente diversi programmi trattano determinate stringhe in un modo speciale. – Daenyth

risposta

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

ottengo (standard_in) 2: errore di sintassi idk perché. è quasi uguale a sopra – svenus

+0

@svenus: questo funziona per me. Non so perché stai ricevendo quell'errore da 'bc'. –

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

è anche possibile utilizzare awk

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

./menu3.sh: riga 278: 12.25: errore di sintassi: operatore aritmetico non valido (token di errore è ".25") – svenus

+0

rimuovere '$ (())'. bash non fa aritmetica fluttuante. Se si desidera impostare 2 posizioni decimali, utilizzare la scala = 2 – ghostdog74

+0

È necessario il simbolo del dollaro prima di ogni nome di variabile. –

13

questo funziona:


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

ha !! Funziona anche troppo! Ho perso l'eco. Grazie! – svenus

0

In primo luogo, cercando di fare aritmetica in virgola mobile con bc(1) senza utilizzare il flag -l è legato per darti alcune risposte divertenti:

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

In secondo luogo, lo $((...)) è un tentativo di eseguire operazioni aritmetiche nella shell; né il mio bash né il dash sono in grado di gestire numeri in virgola mobile.

Se si desidera eseguire l'aritmetica nella shell, annotare printf(1) e (probabilmente) la funzione incorporata della shell printf. Se si desidera eseguire l'aritmetica in bc, annotare la variabile speciale scale.

+0

la maggior parte del $ (()) con bc che ho provato mi ha dato errori. Deve essere a causa del (())? Grazie per il chiarimento. – svenus