Cómo hacer 5509.099999999999 como 5509.09 usando javascript

Cómo hacer 5509.099999999999 como 5509.09 usando javascript.

preguntado el 10 de mayo de 11 a las 13:05

6 Respuestas

Un montón de opciones matemáticas que terminan con .1 así que, ¿qué tal?

var f = 5509.099999999999

if ((f = f.toString()).indexOf(".") >= 0)
    f = f.substr(0, 3 + f.indexOf("."))

print(parseFloat(f))

>>5509.09

contestado el 10 de mayo de 11 a las 17:05

¿Has probado esto?

var value = 5509.099999999999;
var str = value.toString();
var result = str.substr(0,7);

Entonces, si necesita que sea un flotador nuevamente, puede hacer:

var FinalAnswer = parseFloat(result);

No necesita todas estas variables, pero ese es el paso a paso.

contestado el 10 de mayo de 11 a las 17:05

(5509.099999999999) .toString (). Substr (0,7) simple y funciona como un encanto, ¡bien hecho! - Ivan Groznyy

   var result = (Math.round((5509.09999 * 100) - 1)) / 100;

contestado el 10 de mayo de 11 a las 17:05

Podrías usar .toFixed(2) pero esto redondeará el valor, por lo que en su ejemplo terminará con 5509.10 en lugar de 5509.09.

La siguiente mejor opción es usar Math.floor(), que trunca en lugar de redondear. Desafortunadamente, esto solo da resultados enteros, por lo que para obtener el resultado en 2 lugares decimales, debe multiplicar por 100 y luego usar Math.floor()y luego volver a dividir por 100.

var value = 5509.099999999999;
var result = Math.floor(value*100)/100;

[EDITAR] Hmm, desafortunadamente, lo anterior no funciona debido a problemas con la precisión del punto flotante, incluso el primer paso de multiplicarlo por 100 da 550910.

Lo que significa que es probable que la mejor respuesta sea convertirlo en una cadena y cortar la cadena en bits.

var value = 5509.099999999999;
var str_value = value.toString();
var bits = str_value.split('.');
var result = bits[0]+"."+bits[1].substr(0,2);

Normalmente no sugeriría hacer manipulación de cadenas para este tipo de cosas, porque obviamente es un problema matemático, pero dados los requisitos específicos de la pregunta, parece que esta es la única solución viable en este caso.

contestado el 10 de mayo de 11 a las 17:05

un golpe debemos sea ​​.09, pero está encontrando un problema con precisión matemática de punto flotante. :-( simplemente haciendo value*100 da 550110. Es posible que encuentre que la única respuesta que funciona implica toString() y cortando la cuerda. Editaré la respuesta ... Spudley

Sospecho que ese es el mejor enfoque en este caso. - Andy E

Puede truncar el número a un cierto número de posiciones decimales usando esta función:

function truncateNumber(number, digits){
 var divisor = Math.pow(10,digits);
 return Math.floor(number*divisor)/divisor;
}

Si desea redondear el número en su lugar, puede utilizar JavaScript integrado Number.toFixed función. Si siempre desea que el número tenga una cierta cantidad de dígitos, puede usar el Number.toPrecision función.

contestado el 10 de mayo de 11 a las 18:05

No fue mi voto negativo, pero tu solución aún da 5509.1 cuando se especifican 2 lugares decimales. También tienes un error tipográfico ("nuber"): Andy E

si desea tomar dos lugares decimales, puede usar .toPrecision(n) función javascript, donde n es el en total número de dígitos deseado.

entonces, para tu ejemplo, tendrías que hacer

var x = 5509.099999999999;
x = x.toPrecision(6);

esto, sin embargo, da como resultado 5509.10

Respondido el 07 de Septiembre de 11 a las 08:09

en realidad, esto también lo redondea, al menos en IE8 :( - Ivan Groznyy

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.