it-swarm.com.de

"Invalid Arithmetic Operator" führt Gleitkomma-Mathematik in Bash durch

Hier ist mein Skript, es ist ziemlich selbsterklärend:

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

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

echo $meandiff
echo $d1d2

Aber anstatt meine beabsichtigte Ausgabe zu erhalten: 0.0038 2 Ich erhalte die Fehlermeldung Invalid Arithmetic Operator, (error token is ".003")?

11
John Smith

bash unterstützt keine Gleitkomma-Arithmetik. Sie müssen ein externes Dienstprogramm wie bc verwenden.

# 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))
24
chepner

Wenn Sie keine Gleitkomma-Genauigkeit benötigen, entfernen Sie einfach den Dezimalteil.

echo $var | cut -d "." -f 1 | cut -d "," -f 1

schneidet den ganzzahligen Teil des Werts. Der Grund für das zweimalige Schneiden ist das Parsen eines ganzzahligen Teils für den Fall, dass eine regionale Einstellung Punkte verwendet, um Dezimalzahlen zu trennen, und andere können Kommas verwenden.

0
MT San

Sie können die von Ihnen verwendete Shell ändern. Wenn Sie Ihr Skript mit der Bash-Shell ausführen bash scriptname.sh Versuchen Sie, ksh für Ihre Skriptausführung zu verwenden. Bash unterstützt keine arithmetischen Operationen mit Gleitkommazahlen.

0
Karan Saxena