algorithm - redondear - redondeo ala centena ejemplos
Redondeo a los 100 más cercanos (7)
El primer número debe redondearse al segundo número más cercano. Hay muchas maneras de hacer esto, pero ¿cuál es el mejor y más corto algoritmo? Cualquiera para un desafío :-)
1244-> 1200
1254-> 1300
123-> 100
178-> 200
1576-> 1600
1449-> 1400
123456-> 123500
654321-> 654300
23-> 00
83-> 100
¿Es esta tarea?
En general, mod 100, luego si> 50 sumar restar.
El método redondo de Ruby puede consumir precisiones negativas:
n.round(-2)
En este caso -2 te lleva a redondear a la centena más cercana.
Esto lo hará, dado que estás usando matemáticas enteras:
n = (n + 50) / 100 * 100
Por supuesto, no especificó el comportamiento de, por ejemplo, 1350 y 1450, así que elegí redondear. Si necesita redondear o igualar, eso no funcionará.
Sé que es tarde en el juego, pero aquí hay algo que generalmente establezco cuando trato de redondear las cosas al nTh más cercano:
Number.prototype.roundTo = function(nTo) {
nTo = nTo || 10;
return Math.round(this * (1 / nTo) ) * nTo;
}
console.log("roundto ", (925.50).roundTo(100));
Number.prototype.ceilTo = function(nTo) {
nTo = nTo || 10;
return Math.ceil(this * (1 / nTo) ) * nTo;
}
console.log("ceilTo ", (925.50).ceilTo(100));
Number.prototype.floorTo = function(nTo) {
nTo = nTo || 10;
return Math.floor(this * (1 / nTo) ) * nTo;
}
console.log("floorTo ", (925.50).floorTo(100));
Me encuentro usando Number.ceilTo (..) porque estoy trabajando con Canvas y tratando de salir para determinar qué tan lejos está la escala.
Según el comentario anterior de Pawan Pillai, redondeando a la centésima más cercana en Javascript:
100 * Math.floor((foo + 50) / 100);
Para la entrada n
:
(n + 50) / 100 * 100
utilizando división entera.
Tenga en cuenta que muchos idiomas / bibliotecas ya tienen funciones para hacer esto.
100 * round(n/100.0)