Ich habe ein Skript, das Gleitkommawerte verwendet, aber irgendwie kann ich nicht zwei Gleitkommawerte subtrahieren.
Dies ist der Beispielcode
#!/bin/bash
p="1"
h="10"
m=$(echo "3.5"| bc -l)
for (( c=$p; c<=$h; c++ ))
do
r=$(echo "($p-$m)"| bc -l)
echo "Z $c $m $r"
done
und das ist das Ergebnis
Z 1 3.5 -2.5
Z 2 3.5 -2.5
Z 3 3.5 -2.5
Z 4 3.5 -2.5
Z 5 3.5 -2.5
Z 6 3.5 -2.5
Z 7 3.5 -2.5
Z 8 3.5 -2.5
Z 9 3.5 -2.5
Z 10 3.5 -2.5
Antwort1
Ändern Sie die Zeile
r=$(echo "($p-$m)"| bc -l)
Zu
r=$(echo "($c-$m)"| bc -l)
da dies nicht der Fall ist, $p
aber $c
dies wird durch die Schleife geändert.
Antwort2
bash
unterstützt keine Gleitkommaarithmetik. ksh
und zsh
tun. POSIXly, Sie könnten entweder bc
alsFlorians Antwortschlägt vor, oder awk
. Zum Beispiel,
$ awk 'BEGIN{print 2.5+3.7}'
6.2
Ubuntu verfügt außerdem über Python
und Perl
, die mehr als fähig sind, Gleitkommaberechnungen durchzuführen.
$ perl -le 'print(2.5+3.7)'
6.2
$ python3 -c 'print(2.5+3.7)'
6.2
Siehe auch eine sehr umfangreiche Liste anderer Optionen:Wie führt man Integer- und Float-Berechnungen in Bash oder anderen Sprachen/Frameworks durch?
Beachten Sie auch, dass gemäßPOSIX-Shell-Sprachstandardin arithmetischer Erweiterung $((...))
:
Es ist nur die Arithmetik mit vorzeichenbehafteten langen Ganzzahlen erforderlich. Als Erweiterung erkennt die Shell möglicherweise auch arithmetische Ausdrücke, die über die aufgelisteten hinausgehen.
Das Weglassen der Gleitkommaarithmetik entspricht daher den POSIX-Spezifikationen bash
./bin/dash
Antwort3
Ich weiß, das ist spät, aber da das Ergebnis bei Google erschienen ist, liest es vielleicht jemand. Die Lösung ist, es als „$a- $b“ zu schreiben. Mit dem Leerzeichen funktioniert es für mich.