Hello,
Ich nenne die Funktion erstmal "abrunden" ;-)
function abrunden($zahl,$stellen=2,$trenn=',') {
$dec = strrpos($zahl,'.');
if ($dec === FALSE) $dec = strlen($zahl);
return substr($zahl,0,$dec).$trenn.substr(str_pad(substr($zahl,$dec+1),$stellen,'0'),0,$stellen);
}
Die sollte dann auch mit Zahlen ohne Dezimaltrennzeichen und mit weniger Nachkommastellen als gefordert auskommen.
Was meint Ihr dazu - ist das in etwa so wie Ihr das machen würdet?
Vielleicht noch kurz erläutert:
$dec = strrpos($zahl,'.');
- ermittelt die Position des Dezimaltrennzeichens
Da könnten auch mehrere drinstecken, wenn $zahl nicht vom richtigen Typ ist.
Das sollte man mit substr_count() vorher prüfen.
Außerdem sollte man prüfen, ob es sich überhaupt um eine gültige numerische Darstellung handelt.
Und da es eigentlich nur zwei Möglichkeiten gibt, würde ich die Eingabe- und Ausgabeformate einfach mit DE|US bezeichnen, oder so ähnlich.
if ($dec === FALSE) $dec = strlen($zahl);
- falls kein Dezimaltrennzeichen gefunden, setze Trennzeichen-Position auf die Länge des Strings
Jein. es würde reichen, das einfach an den String dranzuhängen
$ausgabe = $links.$dezimalzeichen.substr(strpad($rechts,$stellen,'0'),0,$stellen);
wobei $links auch noch Tausendertrennzeichen enthalten kann.
return substr($zahl,0,$dec).$trenn.substr(str_pad(substr($zahl,$dec+1),$stellen,'0'),0,$stellen);
}
- der Rückgabestring wird aus 3 Teilen zusammengesetzt:
-> Teilstring bis zum Dezimaltrennzeichen
-> $trenn (neues Trennzeichen, normalerweise ',')
-> dem Nachkommateil - erstmal alle Nachkommastellen verwenden, falls zu wenige, mit Nullen auffüllen (auf vorgegebene Länge $stellen), dann alles abschneiden was über $stellen hinausgeht.
Hab ich jetzt was nicht bedacht?
siehe Anzahl der Dezimalrennzeichen und ob es überhaupt eine numerische Darstellung ist.
Du wirst es vielleicht nicht glaube, aber sich dachte mir, das machst Du soch mal eben mit links. Aber ich habe alle Lösungen immer wieder verworfen. Regular Expressions waren mir irgendwie zu teuer, aber wahrschinlich ist preg_match() für die Eingangsprüfung soch das Richtige.
Und dann einfach zwei teile draus machen und zwei For-Schleifen. Eine die vom Punkt nach rechts läuft und eine die vom Punkt nach links läuft und die Tausendertrenner einfügt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau