numero - ¿Cómo redondear números flotantes en javascript?
tofixed sin redondear (13)
Necesito redondear, por ejemplo, 6.688689
a 6.7
, pero siempre me muestra 7
.
Mi método:
Math.round(6.688689);
//or
Math.round(6.688689, 1);
//or
Math.round(6.688689, 2);
Pero el resultado siempre es el mismo 7
... ¿Qué estoy haciendo mal?
Creo que debajo de la función puede ayudar
function roundOff(value,round) {
return (parseInt(value * (10 ** (round + 1))) - parseInt(value * (10 ** round)) * 10) > 4 ? (((parseFloat(parseInt((value + parseFloat(1 / (10 ** round))) * (10 ** round))))) / (10 ** round)) : (parseFloat(parseInt(value * (10 ** round))) / ( 10 ** round));
}
uso: roundOff(600.23458,2);
volverá 600.23
Creo que esta función puede ayudar.
function round(value, ndec){
var n = 10;
for(var i = 1; i < ndec; i++){
n *=10;
}
if(!ndec || ndec <= 0)
return Math.round(value);
else
return Math.round(value * n) / n;
}
round(2.245, 2) //2.25
round(2.245, 0) //2
Mi función de ronda extendida:
function round(value, precision) {
if (Number.isInteger(precision)) {
var shift = Math.pow(10, precision);
return Math.round(value * shift) / shift;
} else {
return Math.round(value);
}
}
Ejemplo de salida:
round(123.688689) // 123
round(123.688689, 0) // 123
round(123.688689, 1) // 123.7
round(123.688689, 2) // 123.69
round(123.688689, -2) // 100
Puedes usar la función auxiliar desde el MDN . Que tendrás más flexibilidad:
Math.round10(5.25, 0); // 5
Math.round10(5.25, -1); // 5.3
Math.round10(5.25, -2); // 5.25
Math.round10(5, 0); // 5
Math.round10(5, -1); // 5
Math.round10(5, -2); // 5
Si estás en el contexto de node.js, puedes probar mathjs
const math = require(''mathjs'')
math.round(3.1415926, 2)
// result: 3.14
Si no solo quiere usar toFixed()
sino también ceil()
y floor()
en un flotador, puede usar la siguiente función:
function roundUsing(func, number, prec) {
var tempnumber = number * Math.pow(10, prec);
tempnumber = func(tempnumber);
return tempnumber / Math.pow(10, prec);
}
Produce:
> roundUsing(Math.floor, 0.99999999, 3)
0.999
> roundUsing(Math.ceil, 0.1111111, 3)
0.112
UPD:
La otra forma posible es esta:
Number.prototype.roundUsing = function(func, prec){
var temp = this * Math.pow(10, prec)
temp = func(temp);
return temp / Math.pow(10, prec)
}
Produce:
> 6.688689.roundUsing(Math.ceil, 1)
6.7
> 6.688689.roundUsing(Math.round, 1)
6.7
> 6.688689.roundUsing(Math.floor, 1)
6.6
Si usa Browserify hoy, tendrá que probar: roundTo a NPM lib muy útil
Utilice la función de toFixed()
.
(6.688689).toFixed(); // equal to 7
(6.688689).toFixed(1); // equal to 6.7
(6.688689).toFixed(2); // equal to 6.69
Vea abajo
var original = 28.59;
var result=Math.round(original*10)/10
te devolverá 28.6
Espero que esto sea lo que quieres ..
> +(6.688687).toPrecision(2)
6.7
Un objeto Number
en JavaScript tiene un método que hace exactamente lo que necesitas. Ese método es Number.toPrecision([precision])
.
Al igual que con .toFixed(1)
, convierte el resultado en una cadena y debe volver a convertirse en un número. Hecho usando el prefijo +
aquí.
simple punto de referencia en mi computadora portátil:
number = 25.645234 typeof number
50000000 x number.toFixed(1) = 25.6 typeof string / 17527ms
50000000 x +(number.toFixed(1)) = 25.6 typeof number / 23764ms
50000000 x number.toPrecision(3) = 25.6 typeof string / 10100ms
50000000 x +(number.toPrecision(3)) = 25.6 typeof number / 18492ms
50000000 x Math.round(number*10)/10 = 25.6 typeof number / 58ms
string = 25.645234 typeof string
50000000 x Math.round(string*10)/10 = 25.6 typeof number / 7109ms
Number((6.688689).toFixed(1)); // 6.7
float(value,ndec);
function float(num,x){
this.num=num;
this.x=x;
var p=Math.pow(10,this.x);
return (Math.round((this.num).toFixed(this.x)*p))/p;
}
var number = 6.688689;
var roundedNumber = Math.round(number * 10) / 10;