FormatMoney Funktion entfernt Nachkomma-Null
Andre
- php
Hallo,
ich hab ein Problem mit einer Funktion, die ich aus einem Forum habe. Diese Funktion soll einen String zu einer Zahl (Geldbetrag, 2 Nachkommastellen) machen.
Das funktioniert auch, ausser der Betrag ist sowas wie "€ 28,05", dann wird aus dem String ein "28,5".
Bei Zahlen wie 28,90 oder so klappt es wunderbar, nur scheinbar nicht, wenn nach dem komma ne 0 ist.
Hat jemand einen Hinweis wieso?
function formatMoney($order_total_display) {
if(is_int($order_total_display)) return $betrag . '.00';
$sBetrag = ltrim($order_total_display, '0');
$sBetrag = strtr($sBetrag, array(',' => '.', ' ' => '.',));
$sBetrag = preg_replace('![^0-9.]!', '', $sBetrag);
$aBetrag = explode('.', $sBetrag);
if(isset($aBetrag[1])) {
$iCent = (int) trim(array_pop($aBetrag));
if(strlen($iCent) > 2) {
$aBetrag[] = $iCent;
$iCent = '00';
} elseif(empty($iCent)) {
$iCent = '00';
}
} else {
$iCent = '00';
}
$iEuro = (int) trim(implode($aBetrag));
if(strlen($iEuro) === 0) {
$iEuro = 0;
}
return (float) $iEuro . '.' . $iCent;
}
$gesamtbetrag = formatMoney($order_total_display);
Danke und VG
ich hab ein Problem mit einer Funktion, die ich aus einem Forum habe.
Das war sicher antik :) PHP unterstützt seit ewigen Zeiten eine eigene Funktion money_format()
Das war sicher antik :) PHP unterstützt seit ewigen Zeiten eine eigene Funktion money_format()
Hm möglich, aber funktioniert money_format auch in meinem Fall?
Ich bekomme ja als String z.b. "€ 26,05" zurückgegeben und will eig. einfach
"26.05" ausgegeben bekommen... ?
Das war sicher antik :) PHP unterstützt seit ewigen Zeiten eine eigene Funktion money_format()
Hm möglich, aber funktioniert money_format auch in meinem Fall?
Ich bekomme ja als String z.b. "€ 26,05" zurückgegeben und will eig. einfach
"26.05" ausgegeben bekommen... ?
Mein Fehler - du willst asu einem String eine Fließkommazahl extrahieren.
Auch wenn ich jetzt den Fluch des Jamie Zawinski herraufbeschwöre: nimm einen regulären Ausdruck.
Ich würde das so machen:
Lese aus dem String alles raus, was wie eine zusammehängende Zahl Dezimalzahl aussieht die Zeichenklasse fütterst du mit Minus, 0-9, Punkt und Komma.
Was auch immer du da extrahiert hast, kannst du dann durch ein mumber_format() jagen. Das dürften ein 3-Zeiler werden.
Die Deluxe-Variante ist, das du das Ergebnis weiterbehandelst und die Kommata und Punkte zählst und entsprechend entscheidest, was das Tausendertrennzeichen ist und was das Dezimaltrennzeichen. Aber da wird wahrscheinlich eh nicht Kraut und Rüben daherkommen - kein Automatismus der Welt kann dir sagen, ob 100.000 jetzt Einhundert Komm Null sind oder Einhunderttausend wenn du den Wert mal so und mal so reinbekommst.
Perfekt danke,
konnte es nun so lösen:
$sBetrag = ltrim($order_total_display, '0');
$sBetrag = strtr($sBetrag, array(',' => '.', ' ' => '',));
$sBetrag = preg_replace('![^0-9.]!', '', $sBetrag);
$gesamtbetrag = number_format($sBetrag, 2);
Moin!
Perfekt danke,
konnte es nun so lösen:
$sBetrag = ltrim($order_total_display, '0');
$sBetrag = strtr($sBetrag, array(',' => '.', ' ' => '',));
$sBetrag = preg_replace('![^0-9.]!', '', $sBetrag);
$gesamtbetrag = number_format($sBetrag, 2);
Nicht perfekt.
Versuche es mal mit '€ 1.234,56' und dann mit '€ 1,234.56'
Mein Tipp wäre:
<?php
define('NL', "\n");
print myBetrag('€ 1.234,56').NL;
print myBetrag('€ 1,234.56').NL;
print myBetrag('€ 12.34').NL;
print myBetrag('12,05').NL;
print myBetrag('12').NL;
function myBetrag($s) {
$s = str_replace('.', ',', $s);
$s = preg_replace('![^0-9,]!', '', $s);
$s = strrev ($s);
$a = explode(',', $s, 2);
if ( ! isset($a[1]) ) { $a[1]=$a[0]; $a[0]=0; }
$a[0] = strrev ($a[0]);
$a[1] = strrev ($a[1]);
$a[1] = str_replace(',', '', $a[1]);
$s = $a[1] . '.' . $a[0];
return number_format($s, 2, ',', '.');
}
?>
Ich hoffe, ich habe das so primitiv notiert, dass sich Kommentare erübrigen.
Ergebnisse:
1.234,56
1.234,56
12,34
12,05
12,00
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Und was machst du bei 100.000 oder 100,000?
Ist das jetzt Einhundert oder Einhunderttausend?
und was ist mit 100'000 oder 100 000?
Wenn sich alle brav an ISO/IEC 80000 hielten, hätten wir das Problem nicht :)
Moin!
und was ist mit 100'000 oder 100 000?
Ergebnis:
print myBetrag('100 000').NL;
print myBetrag('100'000').NL;
100.000,00
100.000,00
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix