parseFloat redondeo
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
Úselo toFixed()
para redondear num
a 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
var num = 4.050000000000001;
num = num.toFixed(2);
toFixed
se redondeará dependiendo de cuántos dígitos después del decimal esté buscando.