Michi: Formatierte ausgabe mit printf

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?

  1. 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

    1. 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 :-(

      1. 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

        1. 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

          Ok danke für die Zeit die du dir genommen hast um mir das zu beantworten.
          Das kommt gleich in mein Notizbuch ;-)

          1. 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

      2. 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.

        1. 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

  2. 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.