Maresa P.: Preis formatieren

Hallo liebes Forum,

ich suche eine Funktion, die mir einen Preis in folgendes Format formatiert:

XX,XX (also mit Komma getrennt und 2 Dezimalstellen nach dem Komma, die Anzahl der Stellen vor dem Komma ist irrelevant)

Die Funktion muss Komma- und Punktwerte verarbeiten können.

Beispiel:

$wert = '12,3'
preis_format($wert)
=> 12,30

$wert = '453.18'
preis_format($wert)
=> 453,18

$wert = '1.1'
preis_format($wert)
=> 1,10

Ich hab das ganze so probiert:

function preis_format($preis) {

ereg_replace(',','.',$preis);
 $preis = (float) $preis;
 return number_format($preis, 2, ',', ' ');

return $preis;
}

Leider führt dies nicht zum gewünschten Ergebnis, sondern ignoriert die Nachkommastellen bei den Kommazahlen.

Wer kann mir helfen und hat evtl eine Funktion parat?

Vielen Dank
Maresa

  1. Hallo Maresa,

    benutze die fertige Funktion number_format()

    Gruß,

    Dieter

  2. Hallo Maresa,

    ich suche eine Funktion, die mir einen Preis in folgendes Format formatiert:
    XX,XX (also mit Komma getrennt und 2 Dezimalstellen nach dem Komma, die Anzahl der Stellen vor dem Komma ist irrelevant)
    Die Funktion muss Komma- und Punktwerte verarbeiten können.

    In PHP gibt es mindestens zwei Möglichkeiten, eine Zahl mit Nachkommastellen zu formatieren:
    number_format()
    und
    sprintf()

    Mit sprintf() könnte die Funktion so realisiert werden:

      
    function preis_format(  
      $wert  
    ) {  
      // Komma auswerten  
      return( sprintf('%01,2f', $wert) );  
    }
    

    ... und mit number_format() so:

      
    function preis_format(  
      $wert  
    ) {  
      // Komma auswerten  
      return( number_format($wert, 2, ',') );  
    }
    

    Den Kommentar "Komma auswerten" kannst du in beiden Funktionen so ersetzen:

      
      // Hat $wert das richtige Format?  
      if( !preg_match('/\A\d+([,.]\d+)\Z/') ) {  
        trigger_error('$wert entspricht nicht den Vorgaben!', E_USER_WARNING);  
        return(FALSE);  
      }  
      
      // Zahlen mit Komma in richtige "Float"-Zahlen umwandeln  
      if( !is_float($wert) ) {  
        list($int, $frac) = explode(',', $wert);  
        $wert = floatval($int.'.'.$frac);  
      }  
    
    

    MffG
    EisFuX

    --
    Auch meine Hosenträger sind intelligent, in dem Sinne, dass man sie regulieren kann. Sie besitzen ein adaptives Verhalten.
    Stanisław Lem
    1. Hallo Maresa,

      Hi EisFux!
      Herzlichen Dank für Deine Hilfe.

      ich suche eine Funktion, die mir einen Preis in folgendes Format formatiert:
      XX,XX (also mit Komma getrennt und 2 Dezimalstellen nach dem Komma, die Anzahl der Stellen vor dem Komma ist irrelevant)
      Die Funktion muss Komma- und Punktwerte verarbeiten können.

      In PHP gibt es mindestens zwei Möglichkeiten, eine Zahl mit Nachkommastellen zu formatieren:
      number_format()
      und
      sprintf()

      ich habe das ganze jetzt so realisiert:

      function humanPreis($wert) {

      // Zahlen mit Komma in richtige "Float"-Zahlen umwandeln
        if( !is_float($wert) ) {
          list($int, $frac) = explode(',', $wert);
          $wert = floatval($int.'.'.$frac);
        }

      return( number_format($wert, 2, ',', '') );
      }

      MffG
      EisFuX

      lg
      Maresa

      1. Hallo

        XX,XX (also mit Komma getrennt und 2 Dezimalstellen nach dem Komma, die Anzahl der Stellen vor dem Komma ist irrelevant)
        Die Funktion muss Komma- und Punktwerte verarbeiten können.

        In PHP gibt es mindestens zwei Möglichkeiten, eine Zahl mit Nachkommastellen zu formatieren: number_format() und sprintf()

        function humanPreis($wert) {

        // Zahlen mit Komma in richtige "Float"-Zahlen umwandeln
          if( !is_float($wert) ) {
            list($int, $frac) = explode(',', $wert);
            $wert = floatval($int.'.'.$frac);
          }

        return( number_format($wert, 2, ',', '') );
        }

        Ich weiß ja nicht, wo die Preise herkommen(DBMS, Textdatei ...). Wie wäre es damit, _alle_ Daten einmal umzuwandeln, und die Preise dann nur noch zur Anzeige mit dem Komma zu versehen. Hat auch den Vorteil, dass die Preise, so der Punkt das Trennzeichen ist, im Sinne von PHP eine "richtige" Zahl ist bzw. dem Schema einer Zahl entspricht. Somit kann man direkt mit den Preisen rechnen.

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.1
        1. Hallo

          Hi!

          Ich weiß ja nicht, wo die Preise herkommen(DBMS, Textdatei ...). Wie wäre es damit, _alle_ Daten einmal umzuwandeln, und die Preise dann nur noch zur Anzeige mit dem Komma zu versehen. Hat auch den Vorteil, dass die Preise, so der Punkt das Trennzeichen ist, im Sinne von PHP eine "richtige" Zahl ist bzw. dem Schema einer Zahl entspricht. Somit kann man direkt mit den Preisen rechnen.

          Die Preise kommen aus unterschiedlichen Quellen auf die ich nicht immer Einfluss habe (Textdatei, MySQL-Datenbank, API) und sind leider untrschiedlich formatiert.

          Ciao
          Maresa

          1. Hallo

            Die Preise kommen aus unterschiedlichen Quellen auf die ich nicht immer Einfluss habe (Textdatei, MySQL-Datenbank, API) und sind leider untrschiedlich formatiert.

            Zumindest bei den Quellen, wo du den Einfluss hast, solltest du die Werte schon beim Speichern in das richtige Format (Schema: 0.00) bringen.

            Tschö, Auge

            --
            Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
            (Victor Hugo)
            Veranstaltungsdatenbank Vdb 0.1
        2. Hallo Auge,

          Hat auch den Vorteil, dass die Preise, so der Punkt das Trennzeichen ist, im Sinne von PHP eine "richtige" Zahl ist bzw. dem Schema einer Zahl entspricht. Somit kann man direkt mit den Preisen rechnen.

          Ich würde die Gleitkommazahlen von PHP nicht zur Preisberechnung benutzen. Das könnte zu Rundungsproblemen führen. Wenn schon rechnen, dann mit ganzen ("integer") Cent-Beträgen. Eventuell hilft auch das PEAR-Paket Math_Finance weiter ...
          MffG
          EisFuX

          --
          Auch meine Hosenträger sind intelligent, in dem Sinne, dass man sie regulieren kann. Sie besitzen ein adaptives Verhalten.
          Stanisław Lem