Der Befehl printf() bzw. sprintf()

Alles, was PHP betrifft, kann hier besprochen werden.

Der Befehl printf() bzw. sprintf()

Postby Quäntchen » 27. December 2005 10:12

Hallo,

ich lerne zur Zeit PHP und bin auch ganz gut bei der Sache, aber irgendwie verstehe ich den Befehl printf() bzw. sprintf() nicht. Kann mir jemand einmal genau erklären, wie der funktioniert? Die Typenangaben habe ich in einem Buch stehen, aber von denen verstehe ich auch nicht alle. Da in dem Lehrbuch der genannte Befehl schon oft vorkam, will ich ihn auch beherrschen. Kann vielleicht jemand helfen? Anhand eines Beispiels und so weiter.

Im Lehrbuch ist ein Skript, ich werde nun einen kleinen Teil davon hinaus nehmen:

Code: Select all
$value = 255.98;

printf( "Formatparameter 5.2x: %5.2f <br />\n", $value );




Das ist noch einer der unkompliziertesten.
Was bedezten die einzelnen Zahlen, der Punkt, usw?
Ich kann mir irgendwie nicht vorstellen, wie daraus 255.98 werden soll?
Also, ich bräuchte ein detailreiche Beschreibung, für Dummies sozusagen ;)

Liebe Grüße
Quäntchen

PS: Es eilt! *g.
Quäntchen
 
Posts: 27
Joined: 27. December 2005 10:02

Postby deepsurfer » 27. December 2005 14:07

Also, ich bräuchte ein detailreiche Beschreibung, für Dummies sozusagen

Gibt es nicht, denn jedes Spezifische Zeichen wird in anderen Tutorials erklärt und daraus ergibt sich ein gesamtes Verhalten.
Also ein Detail-Erklärung in bezug auf dein Scriptschnippsel ist so nicht vorhanden.

Vieleicht versucht einer von PHP-Gurus hier im Forum dir das Aufzuschlüsseln. ;)

Anonsten die Hinweise von php-net durchlesen.
http://de3.php.net/manual/de/function.printf.php
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby Thasmo » 27. December 2005 16:14

Thasmo
 
Posts: 32
Joined: 28. November 2005 13:25

Postby Quäntchen » 27. December 2005 16:47

Also, auf php.net da hab ich schon nachgeschaut, aber das raffe ich einfach nicht :(
Quäntchen
 
Posts: 27
Joined: 27. December 2005 10:02

Re: Der Befehl printf() bzw. sprintf()

Postby test » 04. January 2006 10:41

$value = 255.98;
printf( "Formatparameter 5.2x: %5.2f <br />\n", $value );

das is wie in C ...
- print > gibt normalen Text aus
- printf > Variable im Text kann formatiert werden (bzgl. Nachkommastellen)

Die %5.2 bedeutet, dass von der auszugebenden Variable nur 5 Stellen angezeigt werden (von rechts nach links).
Von diesen 5 Stellen werden 2 Stellen zur Nachkommastelle... also die 2 gibt die Position des Dezimalpunktes an (von links nach rechts)...

Bsp:
float 96854562;
%5.2 >> 968.54
%8.7 >> 9.6854562
%8.1 >> 9685456.2

Ich lasse mich aber auch gerne korrigieren...
test
 
Posts: 9
Joined: 06. October 2005 22:18

Wissen heißt, wissen, wo's geschrieben steht ...

Postby Micha1975 » 06. January 2006 12:53

Ein Lehrbuch zu PHP4 sagt dazu:
Formatierten Output erstellen:
PHP verfügt über 2 Funktionen, die nützlich sind, um formatierten Output zu erzeugen: printf() und sprintf(). Die printf()-Funktion gibt ihren Output aus; die sprintf()-Funktion gibt ihren Output als Stringwert zurück. Beide Funktionen haben im Allgemeinen zwei oder mehr Argumente: Das erste Argument ist ein String, der sogenannte Formatstring, der das Output-Format festlegt; die restlichen Argumente enthalten die Werte, die ausgegeben werden sollen.
Ein einfaches Beispiel:
Code: Select all
printf("Der Wert von n ist: %d", $n);

Das folgende Beispiel zeigt ein komplexeres Beispiel, in dem mehrere Argumente mit sprintf() ausgegeben werden:
Code: Select all
$ergebnis = sprintf("Werte: %d, %f", $n, $x);

Der Formatstring besteht aus einer Reihe von gewöhnlichen Zeichen und Direktiven. Als gewöhnliches Zeichen gilt jedes Zeichen, das kein % ist. Gewöhnliche Zeichen werden einfach in den Output kopiert.
Direktiven sind Zeichenfolgen, die mit dem Zeichen % beginnen. Sie legen fest, wie die entsprechenden Argumente formatiert werden. Eine einfache Direktive, wie beispielsweise die aus dem vorausgegangenen Beispiel, kann aus einem %-Zeichen bestehen, auf das eine Typangabe (beispielsweise d) folgt, die festlegt, dass das Argument als Dezimalzahl behandelt werden soll. Es gibt jedoch komplexere Direktiven, die die folgenden Komponenten in der angebenen Reihenfolge enthalten können:
    Füllzeichen (optional): Das Füllzeichen legt fest, welches Zeichen verwendet werden soll, um das Ergebnis bis zur angegebenen Stringgröße aufzufüllen. Wenn kein Füllzeichen angegeben wird, wird das Ergebnis mit Leerzeichen aufgefüllt. Das Füllzeichen kann ein Leerzeichen oder eine 0 (Null) sein. Ein Leerzeichen wird gewöhnlich als Füllzeichen für Strings verwendet, während eine 0 üblicherweise für Zahlen verwendet wird. Andere Füllzeichen können definiert werden, indem dem Zeichen ein einfaches Anführungszeichen (') vorangestellt wird. Um ein Ergebnis mit Unterstreichungszeichen zu füllen, schreibt man beispielsweise '_.
    Ausrichtungszeichen (optional): Ein Ausrichtungszeichen legt fest, ob das Ergebnis links-oder rechtsbündig ausgerichtet werden soll. Wenn keine Ausrichtung angegeben wird, wird das Ergebnis standardmäßig rechtsbündig ausgerichtet. Wenn ein Bindestrich (-) angegeben wird, wird das Ergebnis linksbündig ausgerichtet.
    Größenangabe (optional): Die Größenangabe ist eine Ganzzahl, die die Mindestanzahl der Zeichen des Ergebnisses festlegt. Wenn das Argument vom Typ double ist, legt die Größenangabe die Mindestanzahl der Zeichen vor dem Dezimalpunkt (Dezimalkomma) fest. Wenn das Ergebnis weniger Zeichen enthält, wird es aufgefüllt.
    Genauigkeit (optional): Die Genauigkeit wird durch einen Dezimalpunkt festgelegt, auf den eine Ganzzahl folgt, die die Anzahl der Dezimalziffern angibt, die in dem Ergebnis angegeben werden sollen. Die Genauigkeit wird nur beim Datentyp double berücksichtigt.
    Formatzeichen (erforderlich): Das Formatzeichen legt fest, wie das Argument behandelt und ausgegeben werden soll. Die Funktionen kennen folgende Formatzeichen:
    b behandelt das Argument als Ganzzahl und gibt es als binären Wert aus.
    c behandelt das Argument als Ganzzahl und gibt das Zeichen aus, das zu dem ASCII-Wert des Arguments gehört.
    d behandelt das Argument als Ganzzahl und gibt es als Dezimalzahl aus.
    f behandelt das Argument als double-Wert und gibt es als Fließkommawert aus.
    o behandelt das Aregument als Ganzzahl und gibt es als Oktalwert aus.
    s behandelt das Argument als String und gibt es aus.
    x behandelt das Argument als Ganzzahl und gibt es als Hexadezimalzahl in Kleinbuchstaben aus.
    X behandelt das Argument als Ganzzahl und gibt es als Hexadezimalzahl in Großbuchstaben aus.
Um ein Prozentzeichen in den Output von printf() oder sprintf() zu schreiben, muss man zwei %-Zeichen notieren (%%). Dann wird die Sonderfunktion von % ignoriert.

Da das Formatieren von Zahlen mit den beschriebenen Funktionen sehr umständlich sein kann, kann man hier oft auch die Funktion number_format(zahl) verwenden. Beispiel:
number_format (zahl, dezimalstellen, dezimalpunktzeichen, tausenderzeichen)
wobei das Argument Zahl erfoderlich ist, die drei anderen Argumente sind optional.
Code: Select all
number_format(1.234, 2)

gibt den Wert 1.23 zurück.

Dein Beispiel:
Code: Select all
printf( "Formatparameter 5.2x: %5.2f <br />\n", $value );

sagt uns also: da printf() verwendet wird, kommt der Output nicht als automatisch als String zurück.
Formatparameter 5.2x: wird als gewöhnlicher Text behandelt.
%5.2f ist durch das %-Zeichen als Formatstring zu erkennen. Da die 5 keine 0 und kein Bindestrich (-) ist, sondern eine Ganzzahl, ist sie die Größenangabe, die .2 die Genauigkeit und f das Formatzeichen, wodurch der Output im Typ double als Fließkommawert zurückkommt. Dieses Format hat eine Wirkung auf die Größenangabe (siehe oben). Deiner 255 werden nun nämlich zwei Leerzeichen vorangestellt, um die 5 Stellen zu füllen. An der Stelle des Formatstrings wird im Output der formatierte Wert von $value angezeigt. Abschließend wird ein HTML-Zeilenumbruch <br> und ein PHP Zeilenumbruch \n an den Output gehängt.

Ich kann Dir so auf Anhieb nicht sagen, ob diese Funktionen in PHP5 erweitert worden sind. Da musst Du Dich echt mal an den Link von Thasmo halten.

cu Micha
Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt. – Thomas Watson, Vorsitzender von IBM, 1943
Micha1975
 
Posts: 25
Joined: 29. December 2005 15:28


Return to PHP

Who is online

Users browsing this forum: No registered users and 12 guests