Formatierte ausgabe mit printf
Michi
- perl
0 hotte (noreg)0 Michi0 hotte (noreg)0 Michi
0 Struppi0 Otto
0 Struppi
Hallo erstmal,
Habe mir das Buch (Jetzt lerne ich Perl) gekauft.
und habe eine frage:
Kapitel 2:
$wert = 2000.01;
printf "%f \n", $wert + "1.01e3";
Also ich weis das 1.01e3 der zahl 1010 entspricht.
wenn ich den variablen wert dazu rechne komme ich auf 3010.01 in der
Lösung steht aber 3010.010000 warum ist das so?
hi,
Habe mir das Buch (Jetzt lerne ich Perl) gekauft.
ausgezeichnet, sehr gut!!!
Kapitel 2:
$wert = 2000.01;
printf "%f \n", $wert + "1.01e3";
Also ich weis das 1.01e3 der zahl 1010 entspricht.
richtig. Aber nur, wenn Du die Anführungszeichen weglässt ;-)
wenn ich den variablen wert dazu rechne komme ich auf 3010.01 in der
Lösung steht aber 3010.010000 warum ist das so?
Nicht quoten, try this:
$wert = 2000.01;
printf "%f \n", $wert + 1.01e3;
Und schwupps haste das richtige Ergebnis.
Hotte
Danke erstmal,
aber in wie weit verändern die doppelquots die berechnung?
Ich würde das gerne verstehen weil das Ergebnis alleine macht ja noch keinen aha Effekt aus.
warum entspricht ....."1.01e3" das: 3010.010000
und .....1.01e3 das: 3010.01
Bitte nicht falsch verstehen bin noch Anfänger und muss noch viel lernen :-(
hi,
aber in wie weit verändern die doppelquots die berechnung?
Das ist die Crux mit den Datentypen, die Perl nicht kennt. Perl versucht dann, je nach Kontext, was draus zu machen, im Beispiel ist der Kontext eine Berechnung von Gleitkommazahlen (%f, float Kontext innerhalb der printf()-Anweisung). Perl evaluiert also das, was zwischen den Anführungszeichen steht, zu einer Zahl und dabei kommt Mist raus.
Es gibt zwar
use strict;
und -w in der shebang
#!/usr/bin/perl -w
aber das hilft in diesem Fall nicht wirklich.
Hotte
hi,
aber in wie weit verändern die doppelquots die berechnung?
Das ist die Crux mit den Datentypen, die Perl nicht kennt. Perl versucht dann, je nach Kontext, was draus zu machen, im Beispiel ist der Kontext eine Berechnung von Gleitkommazahlen (%f, float Kontext innerhalb der printf()-Anweisung). Perl evaluiert also das, was zwischen den Anführungszeichen steht, zu einer Zahl und dabei kommt Mist raus.
Es gibt zwar
use strict;und -w in der shebang
#!/usr/bin/perl -waber das hilft in diesem Fall nicht wirklich.
Hotte
Ok danke für die Zeit die du dir genommen hast um mir das zu beantworten.
Das kommt gleich in mein Notizbuch ;-)
hi,
Ok danke für die Zeit die du dir genommen hast um mir das zu beantworten.
Das kommt gleich in mein Notizbuch ;-)
Ne, schreib das nicht auf, ich erzähle manchmal Mist. Häng Dich mal an Struppi, er fragte nach der Version.
Viele Grüße,
Horst
warum entspricht ....."1.01e3" das: 3010.010000
und .....1.01e3 das: 3010.01
In welcher Perl Version (Meine ist: This is perl, v5.8.8 built for MSWin32-x86-multi-thread)?
Bei mir ergeben beide Schreibweise das exakt gleiche.
Struppi.
Hi Struppi,
In welcher Perl Version (Meine ist: This is perl, v5.8.8 built for MSWin32-x86-multi-thread)?
Bei mir ergeben beide Schreibweise das exakt gleiche.
Das kann ich für meine Perl-Version auch bestätigen:
This is perl, v5.10.0 built for i586-linux-thread-multi
MfG
Otto
Also ich weis das 1.01e3 der zahl 1010 entspricht.
wenn ich den variablen wert dazu rechne komme ich auf 3010.01 in der
Lösung steht aber 3010.010000 warum ist das so?
http://perldoc.perl.org/functions/sprintf.html
precision, or maximum width
You can specify a precision (for numeric conversions) or a maximum width (for string conversions) by specifying a . followed by a number. For floating point formats, with the exception of 'g' and 'G', this specifies the number of decimal places to show (the default being 6), e.g.:
Struppi.