1.899,99 € in Zahl und wieder zurück wandeln

Hallo,

wie kann ich am effektivsten den string "1.899,99 €" in eine Zahl wanden und anschließend wieder in einen wie oben formatierten string zurück wandeln.

Danke!
 
Hi,

für Zahlen kleiner als 10000 würd ich es spontan so machen:
HTML:
function strToVal(str) {
	var rx = new RegExp("\\.");
	str = str.replace(rx, "");
	rx = new RegExp(",");
	str = str.replace(rx, ".");
	var val = parseFloat(str);
	return val;
}

function valToStr(val) {
	var str = val.toString();
	var rx = new RegExp("\\.");
	str = str.replace(rx, ",");
	if (str.indexOf(",") > 3) {
	   str = str.substr(0, 1) + "." + str.substr(1);
	}
	str += " €";
	return str;
}
Auf die Schnelle ist mir allerdings nichts Elegantes eingefallen, die Trennpunkte für beliebig große Zahlen zu setzen (Sonntagsmüdigkeit). Aber ich bin sicher, Sven weiß es - vielleicht meldet er sich ja. ;)

Gruß
.
 
kleiner 10000 oder 100000?

das würde mir ja reichen aber ich schau da ziehmlich dumm drein!

schon in der ersten Zeile steh ich alt aus was passiert mit
var rx = new RegExp("\\."); ?
 
Hi,

ich bin zwar nicht Sven, aber wenn Du Datics Funktion valToStr folgendermassen
erweiterst, sollten die Trennzeichen bei beliebigen Zahlen korrekt angezeigt werden.
HTML:
function valToStr(val) {
    var str = val.toString();
    var rx = new RegExp("\\.");
    str = str.replace(rx, ",");

    // Anzahl der Vorkommastellen
    var intVorkommastellen = str.length - (str.length - str.indexOf(","));
    // Anzahl der Trennzeichen
    var intKTrenner = Math.floor((intVorkommastellen - 1) / 3);
    // Führende Ziffern vor dem ersten Punkt
    var intZiffern = (intVorkommastellen % 3 == 0) ? 3 : (intVorkommastellen % 3);

    // Ziffern vor dem ersten Tausendertrennzeichen mit Punkt versehen
    strNew = str.substring(0, intZiffern);
    // Hilfsstring ohne die bereits behandelten Ziffern
    strHelp = str.substr(intZiffern, (str.length - intZiffern));

    // Restlichen Tausendergruppen durchlaufen
    for(var i=0; i<intKTrenner; i++){
        // 3 Ziffern der nächsten Tausendergruppe mit Punkt an String anhängen
        strNew += "." + strHelp.substring(0, 3);
        // Neuen Hilfsstring ohne die 3 gerade behandelten Ziffern schreiben
        strHelp = strHelp.substr(intZiffern, (strHelp.length - intZiffern));
    }

    // Nachkommastellen anhängen
    strNew += str.substring(intVorkommastellen, str.length) + " EUR";

    return strNew;
}
Ciao
Quaese
 
Hallo,

warum will mein Programmteil nicht?

Hat da von euch eventuell jemand einen Tipp?

Code:
var optionen = new Array(
  "m_absaugung",
  "m_spuelpistole",
  "m_wzbruchkontrolle",
  "m_kupplungseinheit");
var preise = new Array();
  preise["m_absaugung"] = "11.000,00 €";
  preise["m_spuelpistole"] = "12.000,00 €";
  preise["m_wzbruchkontrolle"] = "13.000,00 €";
  preise["m_kupplungseinheit"] = "14.000,00 €";
var m_standard = "10.000,00 €";  <!--Grundmaschinenpreis-->
 
function preisfelder(){
 document.getElementById("m_standardpreisfeld").firstChild.nodeValue = m_standard;
  document.getElementById("m_absaugungpreisfeld").firstChild.nodeValue = preise["m_absaugung"];
        document.getElementById("m_spuelpistolepreisfeld").firstChild.nodeValue = preise["m_spuelpistole"];
         document.getElementById("m_wzbruchkontrollepreisfeld").firstChild.nodeValue = preise["m_wzbruchkontrolle"];
        document.getElementById("m_kupplungseinheitpreisfeld").firstChild.nodeValue = preise["m_kupplungseinheit"];
}
function addieren(){
        var optionspreis=0;
 for(i in optionen){
  if (document.formular.elements[optionen[i]].checked==true)
  { var rxa = new RegExp("\\.");
   preise[optionen[i]] = preise[optionen[i]].replace(rxa, "");
   rxa = new RegExp(",");
   preise[optionen[i]] = preise[optionen[i]].replace(rxa, ".");
   var preis = parseFloat(preise[optionen[i]]);
        optionspreis =+ preis    }
 }
 var rxb = new RegExp("\\.");
 m_standard = m_standard.replace(rxb, "");
 rxb = new RegExp(",");
 m_standard = m_standard.replace(rxb, ".");
 m_standard = parseFloat(m_standard);
 var summe = optionspreis + m_standard;
  
 var gesamtpreis = summe.toString();
 var rxc = new RegExp("\\.");
 gesamtpreis = gesamtpreis.replace(rxc, ",");
 if (gesamtpreis.indexOf(",") > 3) {
    gesamtpreis = gesamtpreis.substr(0, 1) + "." + gesamtpreis.substr(1);
    alert("jo");
 }
 gesamtpreis =+ " €";
        document.getElementById("gesamtpreisfeld").firstChild.nodeValue = gesamtpreis;
}
 
Hi,

beim Überfliegen ist mir aufgefallen, dass Du zweimal =+ verwendest ( optionspreis =+ preis
und gesamtpreis =+ " €")! Korrekt müsste es += heissen.

VIelleicht löst das bereits Dein Problem.

Ciao
Quaese
 
Ja das ist mit gerade auch aufgefallen und jetzt ist wenigstens die Fehlemeldung NaN weg. Das anhängen der Kommastellen (bei mir mit ,00) funktioniert nicht und die Funktion läuft nur ein mal bzw. sie bringt nur beim ersten mal ein Ergebnis.
 
Zurück