parseFloat redondeo

Resuelto JB. asked hace 13 años • 5 respuestas

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

Los campos de entrada tendrán más que solo el ejemplo 1,35, por lo 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>

He probado algunas cosas 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 conMath.floor

JB. avatar Jan 09 '11 23:01 JB.
Aceptado

Úselo toFixed()para redondear numa 2 dígitos decimales usando el método de redondeo tradicional. Redondeará 4,050000000000001 a 4,05.

num.toFixed(2);

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

Ejemplo :

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 numérico de JavaScript: precisión decimal

moinudin avatar Jan 09 '2011 17:01 moinudin
var num = 4.050000000000001;

num = num.toFixed(2);

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

 avatar Jan 09 '2011 17:01