Bernard: number_format Problem mit den Nachkommastellen

Hallo,

ich habe eine Zahl des Datentyps double und möchte Ihn so formatieren, das er an die "tausenderstellen" einen Punkt setzt und falls ein Punkt in der nicht formatierten Zahl auftaucht erkannt wird das es sich um die Nachkommastelle handelt.
das funktioniert soweit auch schon:

$zahl= number_format($zahl,'2',',','.');

Leider erstellt mir diese Funktion so wie sie ist immer Nachkommastellen, auch wenn es eine Ganze Zahl ist.
z.B. die Zahl ist 2399.5 wird nach der Formatierung zur 2.399,50 das ist super aber leider wird aus der 3999 eine 3.999,00
Ich würde gerne die Nachkommastellen nicht angezeigt bekommen wenn es sich um eine Ganzzahl handelt.

mfg

Bernard

  1. Hi,

    Ich würde gerne die Nachkommastellen nicht angezeigt bekommen wenn es sich um eine Ganzzahl handelt.

    dann prüfe dies zuvor.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      dann prüfe dies zuvor.

      Aber ich würde schon gerne die Punkte an den "tausenderstellen" haben.

      1. Moin!

        dann prüfe dies zuvor.

        Aber ich würde schon gerne die Punkte an den "tausenderstellen" haben.

        function my_personal_number_format($number)
        {
          if (number_is_integer($number))
          {
            number_format(ohne_nachkommastellen);
          }
          else
          {
            number_format(mit_nachkommastellen);
          }
        }

        - Sven Rautenberg

        --
        SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hallo,

          if (number_is_integer($number))

          was genau macht number_is_integer , ich finde dazu bei google nichts.

          Wenn das testet ob Nachkommastellen vorhanden sind, wie kann ich dann meine number_format funktion gestalten damit die Nachkommastellen nicht angezeigt werden nachdem ich sie formatiert habe.

          mfg

          Bernard

          1. Moin!

            if (number_is_integer($number))

            was genau macht number_is_integer , ich finde dazu bei google nichts.

            Das ist eine ausgedachte Funktionsbezeichnung, die dir deren Sinn verdeutlichen soll, dass sie prüft, ob eine Zahl Nachkommastellen hat oder nicht.

            Genauso wie der gesamte Code ausgedacht ist, die lediglich das Funktionsprinzip darlegen sollte und insgesamt noch an sehr vielen Stellen eine explizite Ausarbeitung benötigt.

            - Sven Rautenberg

            --
            SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
            1. Hallo,

              ich habe das jetzt mal so probiert, aber irgendwie klappt das auch nicht
               if (preg_match(".",$zahl));
               {
                  $zahl= number_format($zahl,'2',',','.');
               }

              Irgendwie geht der auch in die if- Bedingung rein wenn kein . vorhanden ist.
              woran kann das liegen ?

              mfg

              Bernard

              1. Hallo Bernhard,

                woran kann das liegen ?

                Schau dir an, was preg_match() zurück liefert.
                Außerdem willst du sicherlich nicht überprüfen, ob ein Punkt in der Zahl vorkommt,
                sondern ob es sich bei ihr um einen Integer handelt.

                Grüße
                  David

                --
                >>Nobody will ever need more than 640k RAM!<<
                1981 Bill Gates
                1. Hallo zusammen

                  Schau dir an, was preg_match() zurück liefert.

                  Ach, 0 == FALSE, da war was :/

                  Grüße
                    David

                  --
                  >>Nobody will ever need more than 640k RAM!<<
                  1981 Bill Gates
                  1. Hallo,

                    tja habe dann auch eine Funktion gefunden.
                    is_int() oder is_integer()
                    nun sieht die Sache so aus:

                    if (is_int($zahl))
                     {
                        $zahl= number_format($zahl,'0',',','.');
                     }
                       else
                     {
                        $zahl= number_format($zahl,'2',',','.');
                     }

                    Leider funktioniert das immer noch nicht.
                    Es wird nicht in die Bedingung if(is... hineingegangen sondern immer nur in die else.
                    Ich habe mir auch die Zahlen mal mit einem echo ausgeben lasse. Alles Integer bzw. alle ohne . und ,

                    Was mache ich nun schon wieder falsch ?

                    mfg
                    Bernard

                    1. Moin!

                      tja habe dann auch eine Funktion gefunden.
                      is_int() oder is_integer()

                      Dein Suchbemühen ist toll - leider hast du das falsche gefunden.

                      is_integer() prüft den Typ der Variablen. PHP verwaltet intern Variablen in unterschiedlichen Typen. Wenn deine Rechnung (irgendwie müssen die darzustellenden Zahlen ja entstehen) grundsätzlich Kommazahlen erzeugt, dann sind die Zahlen auch dann Kommazahlen, wenn die Nachkommastellen "0000" lauten.

                      Kennzeichen einer nachkommalosen Zahl ist, dass ihr Wert genau so groß ist, wie der Wert, wenn man die Nachkommastellen abschneidet.

                      Mit intval() (siehe http://de3.php.net/manual/de/function.intval.php) wandelst du einen Wert in eine Integerzahl.

                      Und mit if($wert == intval($wert)) prüfst du eben, ob Nachkommastellen vorhanden sind.

                      - Sven Rautenberg

                      --
                      SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
                      ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
              2. Hallo

                ich meine:

                if (preg_match("/ .\ /",$Zahl))
                 {
                    $Zahl= number_format($Zahl,'2',',','.');
                 }

                Das letzte Posting litt unter blindem copy und paste.
                Jetzt läufts auch.

                mfg

                Bernard

          2. Hallo Bernhard,

            was genau macht number_is_integer

            Nichts. Das ist nur der Pseudoname für eine Funktion, die du nun entsprechend
            suchen musst. Sven nannte dir den Weg, die Funktionen zusammensuchen und
            das Ganze umsetzen ist nun dein Part.

            Falls du es noch nicht kennst, das Manual ist (z.B.) hier zu finden:
            http://php3.de/manua/de

            Grüße
              David

            --
            >>Nobody will ever need more than 640k RAM!<<
            1981 Bill Gates