2016-02-25 17 views
8

Ecco il mio script, la sua abbastanza auto-esplicativo:"aritmetica Operatore non valido" fare matematica a virgola mobile in bash

d1=0.003 
d2=0.0008 
d1d2=$((d1 + d2)) 

mean1=7 
mean2=5 
meandiff=$((mean1 - mean2)) 

echo $meandiff 
echo $d1d2 

Ma invece di ottenere la mia uscita è destinato: 0,0038 io sono sempre l'errore Invalid Arithmetic Operator, (error token is ".003")?

+1

BTW, se si passa da bash a ksh93, il punto di virgola mobile sarebbe nativamente disponibile. –

risposta

15

bash non supporta l'aritmetica in virgola mobile. È necessario utilizzare un'utilità esterna come bc.

# Like everything else in shell, these are strings, not 
# floating-point values 
d1=0.003 
d2=0.0008 

# bc parses its input to perform math 
d1d2=$(echo "$d1 + $d2" | bc) 

# These, too, are strings (not integers) 
mean1=7 
mean2=5 

# $((...)) is a built-in construct that can parse 
# its contents as integers; valid identifiers 
# are recursively resolved as variables. 
meandiff=$((mean1 - mean2)) 
+0

Si lamenta ancora quando cambio la mia aritmetica nel formato = $ ((echo "" | bc))? –

+1

Questo è un errore di battitura, mi dispiace. Dovrebbe essere '$ (...)', non '$ ((...))'. La sostituzione dei comandi e l'espansione aritmetica sono un po 'troppo simili. – chepner

+0

No grazie per il tuo aiuto –