Runden mit Linux shell
Hi! Ich möchte 2 Dinge auf der Linux Shell a) expr 2 / 3 soll nicht 1 ergeben sondern den korrekten 0,666667 und dann soll dieses 0,66667 zu 0,67 (also immer 2 Dezimalstellen) werden wie stell ich das an ? lg
Am Mittwoch, 21. Dezember 2005 08:52 schrieb Martin Hochreiter:
Hi!
Ich möchte 2 Dinge auf der Linux Shell
a) expr 2 / 3 soll nicht 1 ergeben sondern den korrekten 0,666667
und dann soll dieses 0,66667 zu 0,67 (also immer 2 Dezimalstellen) werden
wie stell ich das an ? mit expr gar nicht: aus info expr: `* / %' Multiplication, division, remainder. Both arguments are converted to integers; an error occurs if this cannot be done.
es geht aber so: $ echo "scale=10; 2 / 3" | bc .6666666666 Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Dr. Jürgen Vollmer schrieb:
Am Mittwoch, 21. Dezember 2005 08:52 schrieb Martin Hochreiter:
Hi!
Ich möchte 2 Dinge auf der Linux Shell
a) expr 2 / 3 soll nicht 1 ergeben sondern den korrekten 0,666667
und dann soll dieses 0,66667 zu 0,67 (also immer 2 Dezimalstellen) werden
wie stell ich das an ?
mit expr gar nicht: aus info expr: `* / %' Multiplication, division, remainder. Both arguments are converted to integers; an error occurs if this cannot be done.
es geht aber so:
$ echo "scale=10; 2 / 3" | bc .6666666666
Bye Jürgen
Passt, das war es (habs eben selbst auch rausgekriegt) - danke! lg
Martin Hochreiter wrote:
Hi!
Ich möchte 2 Dinge auf der Linux Shell
a) expr 2 / 3 soll nicht 1 ergeben sondern den korrekten 0,666667
und dann soll dieses 0,66667 zu 0,67 (also immer 2 Dezimalstellen) werden
Ich würde "bc" oder "perl" verwenden. Soweit ich weiß rechnet bash nur integer. Falls sie doch mehr kann, müsste das in der man page stehen. -- Viele Grüße ------------------------------------------------------------------------ Michael
Am Mittwoch, 21. Dezember 2005 08:52 schrieb Martin Hochreiter:
Hi!
Ich möchte 2 Dinge auf der Linux Shell
a) expr 2 / 3 soll nicht 1 ergeben sondern den korrekten 0,666667
und dann soll dieses 0,66667 zu 0,67 (also immer 2 Dezimalstellen) werden
ach den Rest (2-Dez-Stellen)hab' ich übersehen: Man kannes also so machen. echo "scale=2; 2 / 3" | bc allerdings kommt da 0.66 heraus. Die art der Rundung lösst sich glaube ich nicht beeinflussen. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
On Wednesday 21 December 2005 08:52, Martin Hochreiter wrote:
Hi!
Ich möchte 2 Dinge auf der Linux Shell
a) expr 2 / 3 soll nicht 1 ergeben sondern den korrekten 0,666667
und dann soll dieses 0,66667 zu 0,67 (also immer 2 Dezimalstellen) werden
wie stell ich das an ?
Noch ein Vorschlag. Das ist praktisch dasselbe wie die bc Lösung nur in umgekehrter polnischer Notation. printf ist zum richtigen Runden nötig. $ printf '%.2f\n' $(dc -e '3k2 3/n') 0.67 Zur Erläuterung des dc-Kommandos: 3 - legt eine 3 auf den Stack k - liest die 3 und macht das was in bc scale=3 machen würde 2 - legt die 2 auf den Stack 3 - legt die 3 auf den Stack / - dividiert die obersten 2 Werte auf dem Stack und legt das Ergebnis auf den Stack. 2 und 3 sind damit nicht mehr auf dem Stack, sondern 0.666 n - nimmt die 0.666 vom Stack und gibt sie aus. Torsten
participants (4)
-
Dr. Jürgen Vollmer
-
Martin Hochreiter
-
Michael Behrens
-
Torsten Foertsch