Hallo, Am Wed, 29 Feb 2012, Werner Flamme schrieb:
Kyek, Andreas, VF-DE [29.02.2012 12:33]:
Werner Flamme wrote:
Kyek, Andreas, VF-DE [29.02.2012 12:19]:
folgendes awk-Skript:
awk 'BEGIN {x=8.12*100} END {printf "snum=%d, stxt=%s, x, x} <file>
liefert IMMER: snum=811, stxt=812 [..] Um mal die man-Page von awk zu zitieren:
AWK variables are dynamic; they come into existence when they are first used. Their values are either floating-point numbers or strings, or both, depending upon how they are used.
Von ganzzahligen Variablen sehe ich da nichts.
Und wenn Du eine Zahl 8.12 mit 100 multiplizierst, ist das vielleicht für Dein Kopfrechnen 812. Für einen Computer noch lange nicht. Der erfasst das intern vielleicht als 811.999999999. Ein simples "%d" gibt den ganzzahligen Anteil aus -> 811. Ein %.0f gibt die gerundete ganze Zahl aus -> 812.
Fast. Schauen wir doch mal, was AWK da binär rechnet: $ echo 'obase=2; 8.12; 100; ibase=2; 1000.0001111*1100100; obase=1010; 1100101011.101110000000000000000000;'|bc 1000.0001111 ### 8.12 1100100 ### 100 1100101011.101110000000000000000000 ### 8.12 * 100 811.718750000000000000000000 ### = BTW: obase=1010; weil auch dort 'ibase=2' gilt ;) Jetzt sollte auch klar sein, warum mit '%d' 811 ausgegeben wird. BTW: $ perl -e 'printf "%d, %d\n", 811.718750000000000000000000, 8.12*100;' 811, 811 Noch Fragen? -dnh -- Who are you? What do you want? Why are you here? -- Babylon 5 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org