Affe: Zahl formatieren (aus 1 mach 01)

Hallo,

ich stehe gerade irgendwie auf em Schlauch.
Ich möchte eine Zahl, die über ein Formular entgegengenommen wird so formatieren, das sie immer 2 stellig ist. Also aus 1 soll 01 und aus 2 soll 02 [...] und aus 10 soll 10 werden.

Wie ist der Befehl dafür?

  1. Ich möchte eine Zahl, die über ein Formular entgegengenommen wird so formatieren, das sie immer 2 stellig ist. Also aus 1 soll 01 und aus 2 soll 02 [...] und aus 10 soll 10 werden.

    ggf. hilft dir dies weiter:
    1 ist eine zahl, 2 ist ebenfalls eine zahl
    01 ist keine zahl, 02 ebenfalls nicht

    egal mit welchen zahlformatierfunktionen und in welchen zahlensystemen du in php arbeiten wirst, eine ganzzahl oder eine gleitkommazahl hat niemals eine vorangestellt null - vorangestellte nullen haben ggf ordinalzahlen für zb monatnahmen, diese werden aber strenggenommen in der arithmetik nicht als zahlen gesehen, da es nicht sonderlich viel sinn macht, mit ihnen zu rechnen

    1. Hello,

      egal mit welchen zahlformatierfunktionen und in welchen zahlensystemen du in php arbeiten wirst, eine ganzzahl oder eine gleitkommazahl hat niemals eine vorangestellt null

      Und was war mit der Oktaldarstellung?

      Ein harzliches Glückauf

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Und was war mit der Oktaldarstellung?

        was soll damit sein?

        07 in oktal ist 7 und 020 in oktal ist schlichtweg 20

        decoct(), dechex(), hexdec() und wie sie alle heissen, stellen aus genannten gründen alle keine führende null bereit - der wert der zahl ändert sich dadurch nicht, wo sollte also die informationen über die führende null gespeichert werden?

        1. Moin!

          Und was war mit der Oktaldarstellung?
          was soll damit sein?

          07 in oktal ist 7 und 020 in oktal ist schlichtweg 20

          Ganz so einfach ist die Sache nicht.

          decoct(), dechex(), hexdec() und wie sie alle heissen, stellen aus genannten gründen alle keine führende null bereit - der wert der zahl ändert sich dadurch nicht, wo sollte also die informationen über die führende null gespeichert werden?

          Es gibt einen entscheidenden Unterschied zwischen der Zahldarstellung zur Programmlaufzeit und der Zahldarstellung im Quelltext.

          Zur Laufzeit werden alle Zahlen intern im Speicher irgendwie dargestellt - wie genau, interessiert nicht. Werden Zahlen ausgegeben, wird üblicherweise die Darstellung im Dezimalsystem verwendet (außer bei Anwendung von Funktionen wie decoct() etc.), werden in Strings enthaltene Zahlen zu Zahlen gewandelt, gilt das ebenso.

          Stehen Zahlen jedoch im Quelltext, ist der Parser dafür verantwortlich, diese Zahlen in irgendeiner Form in die interne Repräsentation zu wandeln. Auch hier wird standardmäßig das Dezimalsystem verwendet, aber durch Wahl entsprechender Präfixe sind eben auch andere Zahlsysteme möglich.

          echo 020; // gibt 16 aus.  
          echo 0xFF; // gibt 255 aus.  
          echo 123; // gibt 123 aus.  
          
          

          Diese alternativen Zahlensystem lassen sich somit sehr effektiv nutzen, wenn man eine schöne Quelltextdarstellung haben will. Beispielsweise läßt sich die Angabe der Farbe bei den Bildfunktionen (z.B. imagesetpixel()) direkt als hexadezimaler sechsstelliger Wert angeben, gerade so, wie man es auch aus HTML gewohnt ist, und braucht sich (zumindest bei Truecolor-Bildern) nicht mit der Funktion imagecolorallocate() herumschlagen.

          - Sven Rautenberg

          --
          "Love your nation - respect the others."
          1. Stehen Zahlen jedoch im Quelltext, ist der Parser dafür verantwortlich, diese Zahlen in irgendeiner Form in die interne Repräsentation zu wandeln. Auch hier wird standardmäßig das Dezimalsystem verwendet, aber durch Wahl entsprechender Präfixe sind eben auch andere Zahlsysteme möglich.

            echo 020; // gibt 16 aus.

              
            ja, daran hatte ich nicht gedacht, dass bei oktalzahlen eine vorangestellte 0 als präfix dient - afaik dient die 0 in vielen c-ähnlichen sprachen als oktal-präfix - in der mathematik wird aber üblicherweise ein kleines o oder die zahlenbasis in klammern tiefgestellt angefügt  
              
            das ist aber ggf eine weniger empfehlenswerte methode, mit zahlen zu hantieren - es kann sehr leicht passieren, dass man die 0 vergiss - schnell wird da aus 020 = 16 plötzlich 20 in dezimal  
              
            von der seite produziert es zwar mehr code, aber es ist von vorteil mit einer zahlenbasis (für den programmierer) zu rechnen und anschließend, nach getaner arbeit zu konvertieren  
              
            die programmiersprache bzw der interpreter oder compiler rechnet intern dann sowieso mit einer für ihn praktikablen zahlbasis  
              
            von der seite spiels keine rolle ob ich  "hexdec(dechex(100));" oder einfach nur "100" schreibe - das sollte beim übersetzen in maschinensprache eigentlich rausgekürzt werden
            
    2. Hallo,

      1 ist eine zahl, 2 ist ebenfalls eine zahl
      01 ist keine zahl, 02 ebenfalls nicht

      Angenommen, wir verwenden das Dezimalsystem. Dabei wird jede Stelle mit einem Faktor multipliziert, der von der Position der Stelle abhängt, und die Produkte addiert. Daher bedeuten 0017 und 17 (da die Null als Präfix im normalen Gebrauch keine besondere Bedeutung hat) das gleiche:

      [latex]0017 = 10^3 \cdot 0 + 10^2 \cdot 0 + 10^1 \cdot 1 + 10^0 \cdot 7 = 10^1 \cdot 1 + 10^0 \cdot 7 = 17[/latex]

      Es handelt sich also schlicht um eine Definitionssache der Darstellung; wieso sollte dann das eine eine Zahl sein und das andere nicht?

      Gruß

      1. Es handelt sich also schlicht um eine Definitionssache der Darstellung; wieso sollte dann das eine eine Zahl sein und das andere nicht?

        natürlich, da hast du recht - aber  wo soll eine zahl - als beispiel "17" die im datentyp "int" vorliegt die information hinterlegen, dass sie 2 vorangestelle nullen haben soll?

        1. Hallo,

          natürlich, da hast du recht - aber  wo soll eine zahl - als beispiel "17" die im datentyp "int" vorliegt die information hinterlegen, dass sie 2 vorangestelle nullen haben soll?

          Nirgendwo. Es hat ja mit der Darstellung zu tun, also steht es im Formatierungsstring / whatever.

          Gruß

          1. Hallo

            ...  wo soll eine zahl ... die information hinterlegen, dass sie 2 vorangestelle nullen haben soll?

            Nirgendwo. Es hat ja mit der Darstellung zu tun, also steht es im Formatierungsstring / whatever.

            Aaahhhhh, Zauberwort "String".

            Tschö, Auge

            --
            Die deutschen Interessen werden am Liechtenstein verteidigt.
            Veranstaltungsdatenbank Vdb 0.2
  2. echo $begrüßung;

    Ich möchte eine Zahl, [...] formatieren [...]
    Wie ist der Befehl dafür?

    Einfach zu finden, wenn man die englischen Wörter für Zahl und formatieren kennt.

    echo "$verabschiedung $name";

    1. Moin!

      Ich möchte eine Zahl, [...] formatieren [...]
      Wie ist der Befehl dafür?

      Einfach zu finden, wenn man die englischen Wörter für Zahl und formatieren kennt.

      Nein, number_format() bietet keine führenden Nullen.

      Wenn schon kryptisch antworten, dann wenigstens korrekt!

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Nein, number_format() bietet keine führenden Nullen.

        und auch jede andere php-funktion, die irgendwie zahlen formatieren kann - es bleibt lediglich übrig, den datentyp zu ändern und die zahl als string zu formatieren - zwei möglichkeiten wurden ja bereits genannt

        1. Hallo

          es bleibt lediglich übrig, den datentyp zu ändern und die zahl als string zu formatieren

          Da es sich um Benutzereingaben aus einem Forumlar handelt, ist es sowieso nur ein String. Hier springt gedanklich nur die automatische Typkonvertierung von PHP dazwischen. Zudem kommt auch Toms Fragen eine gewisse Relevanz zu. Wenn hier immer wieder zurecht gefordert wird, Maskierungen erst dann einzusetzen, wenn die Notwendigkeit besteht und dies auch nur für den konkreten Fall, so gilt dies auch für dieses[1] Szenario.

          [1] ... wie man es vermuten kann. Über weitere Details schweigt sich Affe leider aus.

          Tschö, Auge

          --
          Die deutschen Interessen werden am Liechtenstein verteidigt.
          Veranstaltungsdatenbank Vdb 0.2
  3. Moin!

    ich stehe gerade irgendwie auf em Schlauch.
    Ich möchte eine Zahl, die über ein Formular entgegengenommen wird so formatieren, das sie immer 2 stellig ist. Also aus 1 soll 01 und aus 2 soll 02 [...] und aus 10 soll 10 werden.

    Wie ist der Befehl dafür?

    sprintf() bzw. printf() formatiert dir alle möglichen Dinge.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
  4. Hi Affe!

    Wie ist der Befehl dafür?

    Schau dir die Funktion sprintf (bzw. printf) an.

    Mit dem Formatstring "%02d" erreichst du deine gewünschte Ausgabe.
    Das Prozentzeichen leitet einen Platzhalter ein.
    Die Null spezifiziert das Füllzeichen.
    Mit der 2 wird festgelegt, wieviele Stellen die Zahl (vor dem Komma) mindestens haben soll. Fehlende Stellen werden mit dem Füllzeichen aufgefüllt.
    Das d steht für Integer also Ganzzahl.

    Beispiel: printf("%02d", 9); // Ausgabe: 09

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. @@Hopsel:

      Beispiel: printf("%02d", 9); // Ausgabe: 09

      printf("%1\$02d", 9); ist evtl. noch besser. [http://www.w3.org/International/quicktips/Overview#authoring]

      Live long and prosper,
      Gunnar

      --
      Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
  5. Hello,

    ich stehe gerade irgendwie auf em Schlauch.
    Ich möchte eine Zahl, die über ein Formular entgegengenommen wird so formatieren, das sie immer 2 stellig ist. Also aus 1 soll 01 und aus 2 soll 02 [...] und aus 10 soll 10 werden.

    Soll also aus dem numerischen Typ wieder ein Literal werden?

    Oder soll die Zahl z.B. in einer Datenbank weiterverarbeiet werden und später erst bei der Ausgabe wieder als Literal mit führenden Nullen angezeigt werden?

    Geht es um Sortierung?

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de