2009-02-25 5 views
20

Le premier nombre doit être arrondi au second nombre le plus proche. Il y a plusieurs façons de le faire, mais quel est le meilleur et le plus court algorithme? Tout le monde pour un défi :-)Arrondi au 100 le plus proche

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

+0

rubis doit être fine – Senthoor

Répondre

28

Pour l'entrée n:

(n + 50)/100 * 100 

utilisant la division de nombre entier.

Notez que beaucoup de langages/bibliothèques ont déjà des fonctions pour cela.

+4

En JavaScript, cela a fonctionné pour moi: 100 * Math.floor ((n + 50)/100); –

0

Est-ce devoir?

Généralement, mod 100, puis si> 50 soustraire autre.

+0

Non pas son travail à la maison :-) – Senthoor

+0

Qu'est-ce que Brian! mod et if-then-else ça va être vraiment lent. Si vous utilisez des entiers, vérifiez la réponse de David. C'est une façon commune de résoudre ce problème. Il fonctionne également avec des nombres à virgule flottante. –

+0

J'ai moi-même trouvé cette réponse dans Ruby. numbers.each {| nombre | met le nombre + '->' + nombre.gsub (/ \ d \ d \ d $ /, (nombre [nombre.size-3,1] .to_i + nombre [nombre.size-2,1] .to_i/5) .to_s + '00 ')} – Senthoor

2

Cela fera, étant donné que vous utilisez nombres entiers:

n = (n + 50)/100 * 100 

Bien sûr, vous ne spécifiez pas le comportement de par exemple, 1350 et 1450, donc j'ai élu à arrondir. Si vous avez besoin d'un round-to-even, ça ne marchera pas.

6
100 * round(n/100.0) 
4

Je sais qu'il est tard dans le jeu, mais voici quelque chose que je généralement mis en place quand je fais face à avoir à arrondir les choses au plus proche nTh:

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)); 

Je me trouve l'aide du numéro .ceilTo (..) parce que je travaille avec Canvas et essaie de sortir pour déterminer à quelle distance à l'échelle.

48

méthode ronde de Ruby peut consommer precisions négatifs:

n.round(-2)

Dans ce cas -2 vous obtient arrondi à la centaine la plus proche.

+1

ruby ​​2.0, pour la victoire sur celui-ci. – Dudo

+1

Beaucoup mieux. Devrait être le gagnant. C'est la réponse native. – Merovex

+1

J'ai appris quelque chose aujourd'hui! –

0

Selon le commentaire de Pawan Pillai ci-dessus, arrondi au plus proche 100 en Javascript:
100 * Math.floor((foo + 50)/100);

Questions connexes