2010-12-14 23 views
295

Tengo el siguiente código. Me gustaría tenerlo tal que si price_result es igual a un entero, digamos 10, me gustaría agregar dos decimales. Entonces 10 sería 10.00. O si es igual a 10.6 sería 10.60. No estoy seguro de cómo hacer esto.flotante de análisis con dos lugares decimales

price_result = parseFloat(test_var.split('$')[1].slice(0,-1)); 

Respuesta

687

Puede utilizar toFixed() hacer que

var twoPlacedFloat = parseFloat(yourString).toFixed(2) 
+10

Nunca supe sobre arreglado() hasta ahora. THX aprendió algo nuevo hoy! – user357034

+1

contento de ayudar y mantener el buen trabajo en - "aprender algo nuevo todos los días" –

+3

enFijo es bastante problemático. Además, aquí hay un enlace mejor que w3schools https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toFixed – gotofritz

-1

Tengo otra solución.

Puede utilizar round() hacer que en lugar toFixed()

var twoPlacedFloat = parseFloat(yourString).round(2) 
+0

¿Por qué el voto a favor? –

+6

@ AustinHenley Intenté usar round() y no funcionó. Esa es probablemente la razón por la cual la gente está bajando la votación. Puede estar refiriéndose a Math.round() – Nathan

+0

@Nathan, necesita ser utilizado en línea, después de 'parseFloat()' ya que he actualizado la respuesta por @zsalzbank – Alastair

37

Cuando se utiliza toFixed, siempre devuelve el valor como una cadena. Esto a veces complica el código. Para evitar eso, puedes hacer un método alternativo para Número.

Number.prototype.round = function(p) { 
    p = p || 10; 
    return parseFloat(this.toFixed(p)); 
}; 

y uso:

var n = 22/7; // 3.142857142857143 
n.round(3); // 3.143 

o simplemente:

(22/7).round(3); // 3.143 
+0

Escribí un programa de carro de compras e intenté usar los métodos toFixed() y round() encadenados al método parseFloat(). Ninguno de estos métodos funcionó con el parseFloat(). – Chris22

+0

Esto me salvó algunos dolores de cabeza. +1 solo por eso. No tenía idea de que convertiría los números en cadenas. – Lukas

+0

@Lukas No es, si se parseFloat – Vlada

0

Prueba esto (ver comentarios en el código):

function fixInteger(el) { 
    // this is element's value selector, you should use your own 
    value = $(el).val(); 
    if (value == '') { 
     value = 0; 
    } 
    newValue = parseInt(value); 
    // if new value is Nan (when input is a string with no integers in it) 
    if (isNaN(newValue)) { 
     value = 0; 
     newValue = parseInt(value); 
    } 
    // apply new value to element 
    $(el).val(newValue); 
} 

function fixPrice(el) { 
    // this is element's value selector, you should use your own 
    value = $(el).val(); 
    if (value == '') { 
     value = 0; 
    } 
    newValue = parseFloat(value.replace(',', '.')).toFixed(2); 
    // if new value is Nan (when input is a string with no integers in it) 
    if (isNaN(newValue)) { 
     value = 0; 
     newValue = parseFloat(value).toFixed(2); 
    } 
    // apply new value to element 
    $(el).val(newValue); 
} 
4

para devolver un número, añadir otro capa de paréntesis. Lo mantiene limpio.

var twoPlacedFloat = parseFloat((10.02745).toFixed(2)); 
+1

¿Falta algo en su fórmula? 'var twoPlacedFloat = parseFloat (('2.00'). toFixed (2))' genera un error. –

+0

lo siento, tenía una variable de cadena en lugar de un número, que toFixed() necesita - corregido ahora. Pero la respuesta de Rob usando Math.round es algo a considerar en términos de rendimiento. – pvanallen

31

Si necesita un rendimiento (como en los juegos):

Math.round(number * 100)/100 

Se trata de 100 veces más rápido que parseFloat (Number.toFixed (2))

http://jsperf.com/parsefloat-tofixed-vs-math-round

+3

Con la fórmula anterior '2.00' se devuelve 2. pero quiero que sea 2.00. –

+3

No puedes tenerlo de ambas maneras. Si desea que la salida sea un número en lugar de una cadena, no obtendrá ceros al final. Por lo tanto, podría usar lo anterior convertido a una cadena: var twoPlacedFloat = (Math.round (2.002745 * 100)/100). Fijado (2); – pvanallen

+1

¿Aumentará la velocidad si cambio de 100 a 200? – alashow

-1

sencilla cadena de javascript para flotar

var it_price = chief_double($("#ContentPlaceHolder1_txt_it_price").val()); 

function chief_double(num){ 
    var n = parseFloat(num); 
    if (isNaN(n)) { 
     return "0"; 
    } 
    else { 
     return parseFloat(num); 
    } 
} 
0

Utilice la función siguiente si no desea redondear.

function ConvertToDecimal(num) { 
    num = num.toString(); //If it's not already a String 
    num = num.slice(0, (num.indexOf(".")) + 3); //With 3 exposing the hundredths place 
    alert('M : ' + Number(num)); //If you need it back as a Number  
} 
0

Por lo que su valor: Un número decimal, es un número decimal, ya sea que ronda a algún otro valor o no. Internamente, se aproximará a una fracción decimal de acuerdo con la regla de punto flotante arthmetic y manejo. Permanece un número decimal (punto flotante, en JS un doble) internamente, sin importar cuántos dígitos quieras que muestre.

Para presentarlo para su visualización, puede elegir la precisión de la pantalla para lo que desee mediante la conversión de cadenas. La presentación es un problema de visualización, no de almacenamiento.

0

Si su objetivo es analizar, y su entrada puede ser un literal, entonces se esperaría un float y toFixed no va a disponer que, por lo que aquí son dos funciones simples para proporcionar este:

function parseFloat2Decimals(value) { 
    return parseFloat(parseFloat(value).toFixed(2)); 
} 

function parseFloat2Decimals(value,decimalPlaces) { 
    return parseFloat(parseFloat(value).toFixed(decimalPlaces)); 
} 
Cuestiones relacionadas