2011-02-01 5 views
9

Ho una funzione che sto usando per rimuovere i caratteri indesiderati (definiti come simboli di valuta) dalle stringhe, quindi restituire il valore come un numero. In caso di restituzione del valore, sto facendo la seguente chiamata:Come interrompere parseFloat() dallo stripping degli zeri alla destra del decimale

return parseFloat(x);

Il problema che ho è che quando x == "0.00" Mi aspetto di ottenere 0.00 (un galleggiante con due decimali) indietro. Quello che ottengo invece è semplicemente 0.

Ho anche provato la seguente:

return parseFloat(x).toFixed(2);

e ancora ottenere semplicemente 0 indietro. Mi sto perdendo qualcosa? Qualsiasi aiuto sarebbe molto apprezzato.

Grazie !!

risposta

4

semplice:

function decimalPlaces(float,length) { 
    ret = ""; 
    str = float.toString(); 
    array = str.split("."); 
    if(array.length==2) { 
    ret += array[0] + "."; 
    for(i=0;i<length;i++) { 
     if(i>=array[1].length) ret += '0'; 
     else ret+= array[1][i]; 
    } 
    } 
    else if(array.length == 1) { 
    ret += array[0] + "."; 
    for(i=0;i<length;i++) { 
     ret += '0' 
    } 
    } 

    return ret; 
} 

document.write(decimalPlaces(3.123,6)); 
+0

Penso che questa sia la soluzione perché è necessario un stringa per la stampa, non un numero perché penso per te 3.00 == 3 ma vuoi stampare il numero con 2 cifre decimali. –

+0

non è rotondo? se 2.009 dovrebbe essere 2.01 – Mahi

10

questo dovrebbe funzionare:

return parseFloat(x).toFixed(2); 

è possibile testarlo eseguendo questo in Firebug:

var x = '0.00'; 
alert(parseFloat(x).toFixed(2)); 
+0

Non ha detto OP ha provato quello e non ha funzionato? –

+0

@Ted Hopp - Indipendentemente da ciò che afferma l'OP, l'ho provato in IE 8, Safari, Firebug e la console JS di Chrome, sto dando a Victor il +1 per questo, poiché è corretto almeno per quanto mi riguarda può testare. – jball

+0

@jball - Sono d'accordo ... dovrebbe funzionare, ma non è così. Speravo che qualcuno avesse visto un comportamento simile prima e potesse darmi un consiglio sul perché non potesse farlo. – user599144

7

parseFloat() trasforma una stringa in un numero in virgola mobile. Questo è un valore binario, non una rappresentazione decimale, quindi il concetto del numero di zeri a destra del punto decimale non si applica nemmeno; tutto dipende da come è stato formattato in una stringa. Per quanto riguarda toFixed, io suggerirei di convertire il numero in virgola mobile a un numero:

new Number(parseFloat(x)).toFixed(2); 
+0

Se x = '2.00' o' '2.00'', si ottiene comunque la rappresentazione della stringa '' 2.00''. –

+0

@ConAntonakos - Beh, sì, questo è il punto. Non è possibile avere "zero finali" in un valore a virgola mobile, solo nella rappresentazione di stringa del valore. –

+0

Mi rendo conto, ma speravo che si potesse mantenere il punto di virgola mobile senza dover forzarlo su una stringa. :( –

Problemi correlati