two parsedecimal parse one float decimals decimales javascript math parsefloat

javascript - parsedecimal - parsefloat 2



parseFloat rounding (5)

En lugar de redondear, es posible que desee utilizar el puerto de BigDecimal de Java para obtener matemática decimal realmente precisa.

Tengo una función de javascript que agrega campos de entrada automáticamente, pero agregar números como 1.35 + 1.35 + 1.35 me da una salida de 4.050000000000001, solo como un ejemplo. ¿Cómo puedo redondear el total al segundo decimal en lugar de esa cadena larga?

Los campos de entrada tendrán más que solo el ejemplo de 1.35, así que necesito que el total nunca tenga más de 2 puntos después del decimal. Aquí está el código de trabajo completo:

<html> <head> <script type="text/javascript"> function Calc(className){ var elements = document.getElementsByClassName(className); var total = 0; for(var i = 0; i < elements.length; ++i){ total += parseFloat(elements[i].value); } document.form0.total.value = total; } function addone(field) { field.value = Number(field.value) + 1; Calc(''add''); } </script> </head> <body> <form name="form0" id="form0"> 1: <input type="text" name="box1" id="box1" class="add" value="0" onKeyUp="Calc(''add'')" onChange="updatesum()" onClick="this.focus();this.select();" /> <input type="button" value=" + " onclick="addone(box1);"> <br /> 2: <input type="text" name="box2" id="box2" class="add" value="0" onKeyUp="Calc(''add'')" onClick="this.focus();this.select();" /> <input type="button" value=" + " onclick="addone(box2);"> <br /> <br /> Total: <input readonly style="border:0px; font-size:14; color:red;" id="total" name="total"> <br /> </form> </body></html>

Algunas cosas que he intentado, que deberían funcionar, pero claramente las estoy implementando incorrectamente:

for(var i = 0; i < elements.length; ++i){ total += parseFloat(elements[i].value.toString().match(/^/d+(?:/./d{0,2})?/)); var str = total.toFixed(2);

o

for(var i = 0; i < elements.length; ++i){ total += parseFloat(elements[i].value * 100) / 100).toFixed(2)

Tampoco he tenido suerte con Math.floor


Esto funciona:

$(document).ready( function() { $(''#field1'').blur(function(){ $(''#field2'').val(parseFloat($(this).val() * 2.2).toFixed(1)); }); $(''#field2'').blur(function(){ $(''#field1'').val(parseFloat($(this).val() / 2.2).toFixed(1)); }); } );

Esto falla:

$(document).ready( function() { $(''#field1'').blur(function(){ $(''#field2'').val(parseFloat($(this).val() * 2.2)).toFixed(1); }); $(''#field2'').blur(function(){ $(''#field1'').val(parseFloat($(this).val() / 2.2)).toFixed(1); }); } );

Así que ten cuidado con la forma en que colocas el paréntesis () ... En el primer caso, el redondeo funcionará, pero no funcionará en el segundo ...


Puede usar Math.round(total*100000000000)/100000000000; en el código. Funcionará para la mayoría de los casos


Use para toFixed() para redondear num a 2 dígitos decimales usando el método de redondeo tradicional. Va a redondear 4.050000000000001 a 4.05.

num.toFixed(2);

Quizás prefiera usar toPrecision() , que eliminará todos los ceros finales resultantes.

Example :

1.35+1.35+1.35 => 4.050000000000001 (1.35+1.35+1.35).toFixed(2) => 4.05 (1.35+1.35+1.35).toPrecision(3) => 4.05 // or... (1.35+1.35+1.35).toFixed(4) => 4.0500 (1.35+1.35+1.35).toPrecision(4) => 4.05

Referencia: Formato de número de JavaScript - Precisión decimal


var num = 4.050000000000001; num = num.toFixed(2);

toFixed se redondeará dependiendo de cuántos dígitos después del decimal que está buscando.