Preis formatieren
Maresa P.
- php
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
Hallo Maresa,
benutze die fertige Funktion number_format()
Gruß,
Dieter
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
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
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
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
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
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