2009-02-25 32 views
20

El primer número debe redondearse al segundo número más cercano. Hay muchas formas de hacerlo, pero ¿cuál es el mejor y más corto algoritmo? Cualquier persona para un desafío :-)Redondeo a 100

1244-> 1200
1254-> 1300
123-> 100
178-> 200
1576-> 1600
1449-> 1400
123456- > 123500
654321-> 654.300
23-> 00
83-> 100

+0

rubí debe estar bien – Senthoor

Respuesta

28

Para la entrada de n:

(n + 50)/100 * 100 

usando división entera.

Tenga en cuenta que muchos idiomas/bibliotecas ya tienen funciones para hacer esto.

+4

En JavaScript, esto funcionó para mí: 100 * Math.floor ((n + 50)/100); –

0

Es esta tarea?

En general, mod 100, luego si> 50 sumar más restar.

+0

no no es un trabajo a domicilio :-) – Senthoor

+0

¿Qué demonios Brian! mod y if-then-else va a ser muy lento. Si usa números enteros, consulte la respuesta de David. Es una forma menos común de resolver este problema. También funciona con números de coma flotante. –

+0

Yo mismo presenté esta respuesta en Ruby. numbers.each {| number | pone el número + '->' + number.gsub (/ \ d \ d \ d $ /, (número [number.size-3,1] .to_i + number [number.size-2,1] .to_i/5) .to_s + '00 ')} – Senthoor

2

Esto lo hará, dado que está utilizando matemáticas número entero:

n = (n + 50)/100 * 100 

Por supuesto, no se especificó el comportamiento de, por ejemplo, 1350 y 1450, así que he elegido para redondear. Si necesita una ronda para igualar, eso no funcionará.

6
100 * round(n/100.0) 
4

Sé que es tarde en el juego, pero esto es algo general I fijó cuando estoy tratando con tener que redondear las cosas hasta el enésimo más cercana:

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 con Número .ceilTo (..) porque estoy trabajando con Canvas y tratando de salir para determinar qué tan lejos a escala.

método redonda
48

de Ruby puede consumir precisiones negativos:

n.round(-2)

En este caso se le -2 redondeo a la centena más cercana.

+1

ruby ​​2.0, por la victoria en este caso. – Dudo

+1

Mucho mejor. Debería ser el ganador. Esta es la respuesta nativa. – Merovex

+1

¡Me ha enseñado algo hoy! –

0

De acuerdo con el comentario de Pawan Pillai anterior, redondeando al número 100 más cercana en Javascript:
100 * Math.floor((foo + 50)/100);