2012-04-19 8 views
6

tengo esto:¿Eliminar dígitos después de dos puntos decimales, no el número redondo en javascript?

i=4.568; 
document.write(i.toFixed(2)); 

de salida:

4.57 

Pero yo no quiero redondear el último número a 7, ¿qué puedo hacer?

+0

Cuando se trabaja con punto flotante binario, este tipo de cosas pueden suceder. – Pointy

+0

@Pointy: No; él simplemente no quiere redondear. – SLaks

+0

Sí, pero mi punto es que, en general, cuando se trata de coma flotante no se puede garantizar que una constante que escriba terminará siendo lo que cree que es, redondeando o no redondeando, principalmente porque 2 y 5 son relativamente primos: -) – Pointy

Respuesta

9

Usa matemáticas simples en su lugar;

document.write(Math.floor(i * 100)/100); 

(jsFiddle)

Puede pegarlo en su propia función para su reutilización;

function myToFixed(i, digits) { 
    var pow = Math.pow(10, digits); 

    return Math.floor(i * pow)/pow; 
} 

document.write(myToFixed(i, 2)); 

(jsFiddle)

+0

La función no devuelve nada ..! –

+0

debe ser: document.write (Math.floor (i * 100)/100); –

0

Un enfoque ligeramente complicado:

var i=4.568, 
    iToString = ​i + ''; 
    i = parseFloat(iToString.match(/\d+\.\d{2}/)); 
console.log(i); 

Esto toma efectivamente la variable i y la convierte en una cadena, y luego utiliza una expresión regular para que coincida con los números antes del punto decimal y los dos que siguen a ese punto decimal, usando parseFloat() para luego convertirlo a un número.

Referencias:

5

acaba de cortar la cadena más larga:

i.toFixed(3).replace(/\.(\d\d)\d?$/, '.$1') 
+0

gracias por la publicación SLaks – ranjenanil

+0

aFixed es una solución más corta que hace su trabajo. – Mayhem

Cuestiones relacionadas