Andreas-Lindig: Zahlenformat umwandeln

Beitrag lesen

Hallo!

selber!

in USA 123,456.00 oder 123456.00 oder 123,456 oder 123456

stimmt, aber gute Typografie stammt aus Deutschland oder der Schweiz ,-)

Ich habe das mal so probiert:

function php_preis($eingegebener_preis){
    if (preg_match("/.[0-9]{1,2}$/",$eingegebener_preis)) {
     return str_replace(",","",$eingegebener_preis);
}
else {
     return str_replace(",",".",str_replace(".","",$eingegebener_preis));
}
}

verstehe ich den Ausdruck richtig?:
1. Du suchst nach einem String, der einen Punkt und danach ein oder zwei Ziffern enthält (ami-Screibweise) und löscht dann das Komma (aber nur, sofern vorhanden!)
hmm...
sieht gut aus. aber was ist, wenn der User versehentlich oder aus terroristischen Motiven drei nachkomma(nachpunkt)stellen schreibt?
wird dann nicht aus: 150,000,000.000 (für hundertfünfzig-komma-null-millionen) eine: 150.000.000000 ?

2. ist 1. nicht der Fall gehst Du wohl von deutscher Buchhalter-Schreibweise aus und löscht den Punkt (als tausender-Trenner) und ersetzt dann das Komma durch einen Punkt.
hmm...
ich glaube das würde gehen - wenn der User brav ist und das tut, was Du willst.
aber was ist, wenn er nur mehrere Kommas eingibt, z.B.: 150,000,000 für hundertfünfzigmillionen? dann kommst Du nicht in Fall 1. rein, oder? Du erhälst also: 150.000.000

Was habe ich vieleicht nicht bedacht? Hat es Sinn [...] Währungsangaben abzufangen, also auch wenn jemand dahinter oder davor noch EUR, €, USD, $ ... eingibt?

Ich glaube schon - wichtig finde ich vor dem Abschicken der Zahl eine Kontrollausgabe: "das haben Sie eingegeben: wolle Sie das senden?"

Ich habe die Ersetzungen mal so gemacht (fängt auch alle nicht Zahlen ab, bzw. löscht sie aus dem String) allerdings nicht so elegant wie Du und in JavaScript:

//Preiseingaben in korrekte Float-Zahl umwandeln; Zahlen mit Punkt oder Komma aktzeptieren
function preis_format(preisilein)
{
 var string;
 preis=preisilein.toString();

//wenn ein Preis mit Komma eingegeben wurde, dieses in Punkt umwandeln
 if(preis.indexOf(',')!=-1)
 {
  string='';
  string += preis.substring(0, preis.indexOf(','));
  string += '.';
  string += preis.substring(preis.indexOf(',')+1, preis.indexOf(',')+3);
 }

//wenn ein Preis mit Punkt eingegeben wurde, auf zwei Nachkommastellen begrenzen
 else if(preis.indexOf('.')!=-1){
  string=preis.substring(0, preis.indexOf('.')+3);
 }
 else if(preis.indexOf('.')==-1 && preis.indexOf(',')==-1){
  string=preis+'.00';
 }

//preis-String in Zahl umformen
 preis_float=parseFloat(string);
 preis=Math.round(preis_float*100)/100;
}

bei massivem Blödsinn gibt das System NaN zurück - das kannst Du ja vor der Datenbank noch abfragen.

/******* dies ist nicht direkt Dein Problem, hier kann ich wieder eine Float-Zahl eingeben und einen deutschen Preis daraus machen ******************/
//Ausgabepreis mit zwei Nachkommastellen formatieren
function ausgabe(preis)
{
 var string;

//Float-Wert mit drei Nachkommastellen (ohne den Euro-Pfennig-Wert zu ändern)
 ausgabe=preis+0.001;

//zurück in String, um mit Komma formatieren zu können
 ausgabe=ausgabe.toString();
 string='';
 string += ausgabe.substring(0, ausgabe.indexOf('.'));
 string += ',';
 string += ausgabe.substring(ausgabe.indexOf('.')+1, ausgabe.indexOf('.')+3);

return string;
}

mit dieser Funktion gebe ich den formatierten Preis immer zurück und der User kann sehen ob er das richtige eigegeben hat

Gruß, Andreas