2016-04-24 30 views
0

ich habe die folgende Funktion cpmwarum der Wert von HTML-Textfeld ändern, wenn es Komma hat?

Funktion CalCPM() {

var nv = document.getElementById('txtviews').value; 
    var nc = document.getElementById('txtcost').value; 
    var result =parseFloat(nc)/parseFloat(nv)/1000; 
    if(!isNaN(result)) 
     { 
     document.getElementById('cpm').value = result.toFixed(4); 
     } 

}

es gut funktionieren erwarten zu berechnen, wenn Sie Komma der Zahl ausgedrückt, bedeutet wenn Sie setzen txtviews 1000000 und in txtcost 3000 erhalten Sie ein korrektes Ergebnis, das ist 3.000

Allerdings, wenn Sie co verwenden mmas in eine der Zahlen dann beginnt das Problem, wie

, wenn Sie in txtviews 1.000.000 setzen und in txtcost 3000

dann wird das Ergebnis 0,000003

sein, die kein korrekter Wert ist, jede Idee warum?

Dank

Antwort

0

Das Zahlenformat von parseFloat verwendet wird das Komma als Trenn Tausende nicht erkennen. Alles danach wird ignoriert.

parseFloat("1,000,000") wird in derselben Weise behandelt wie parseFloat("1P000P000");, d.h. als 1.

Von MDN:

Wenn es ein anderes Zeichen als ein Zeichen trifft (+ oder -), die Ziffer (0-9), ein Komma oder ein Exponent, gibt sie den Wert bis zu, dass Zeigen und ignorieren Sie dieses Zeichen und alle nachfolgenden Zeichen.

0

Dies sollte loszuwerden Kommas helfen und konvertieren Sie den Wert

nc = parseFloat(nc.replace(/,/g, '')); //get rid of commas 
nv = parseFloat(nv.replace(/,/g, '')); 
var result = nc/nv/1000; 
0

Verwenden reg-ex dies die Lösung sein wird, an die Nummer:

function CalCPM() 
{ 
    var nv = (document.getElementById('txtviews').value).replace(/,/g,''); 
    var nc = (document.getElementById('txtcost').value).replace(/,/g,''); 
    var result =parseFloat(nc)/parseFloat(nv)/1000; 
    if(!isNaN(result)) 
    { 
    document.getElementById('cpm').value = Number(result).toFixed(4); 
    } 
}