2011-02-01 67 views
9

Tengo una función que estoy usando para eliminar los caracteres no deseados (definidos como símbolos de moneda) de cadenas y luego devolver el valor como un número. Al devolver el valor, estoy haciendo la siguiente llamada:Cómo impido que parseFloat() elimine ceros a la derecha del decimal

return parseFloat(x);

El problema que tengo es que cuando x == "0.00" espero obtener 0.00 (un flotador con dos decimales) de nuevo. Lo que me pasa en cambio, es simplemente 0.

También he intentado lo siguiente:

return parseFloat(x).toFixed(2);

y aún así obtener simplemente 0 posterior. ¿Me estoy perdiendo de algo? Cualquier ayuda sería muy apreciada.

Gracias!

Respuesta

4

simple:

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

Creo que esta es la solución porque necesita una cadena para la impresión, no un número porque creo que para usted 3.00 == 3 pero desea imprimir el número con 2 decimales. –

+0

no redondea? si 2.009 debería ser 2.01 – Mahi

10

esto debería funcionar:

return parseFloat(x).toFixed(2); 

puede comprobarlo ejecutando esto en Firebug:

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

¿Se OP no dice que él intentó eso y no funcionó? –

+0

@Ted Hopp: Independientemente de lo que indique el OP, lo he probado en IE 8, Safari, Firebug y Chrome JS Console, le doy a Victor el +1 por esto, ya que es correcto al menos hasta donde yo puede probar. – jball

+0

@jball - Estoy de acuerdo ... debería funcionar, pero no es así. Esperaba que alguien hubiera visto un comportamiento similar antes y podría darme una pista de por qué podría no ser así. – user599144

7

parseFloat() convierte una cadena en un número de coma flotante. Este es un valor binario, no una representación decimal, por lo que el concepto del número de ceros a la derecha del punto decimal ni siquiera se aplica; todo depende de cómo se formatea de nuevo en una cadena. En cuanto a toFixed, sugeriría convertir el número de coma flotante de un número:

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

Si x = '2.00' o' '2.00'', aún obtiene la representación de cadena '' 2.00''. –

+0

@ConAntonakos - Bueno, sí, ese es el punto. No puede tener "ceros finales" en un valor de punto flotante, solo en la representación de cadena del valor. –

+0

Me doy cuenta, pero esperaba que pudieras retener el punto flotante sin necesidad de forzarlo con una cuerda. :( –

Cuestiones relacionadas