40 votes

Comment plafonner et arrondir le nombre en rubis

Je voudrais à "cap" un certain nombre de Ruby (on Rails).

Par exemple, j'ai, en tant que résultat d'une fonction, d'un flotteur, mais j'ai besoin d'un int.

J'ai des directives très précises, en voici quelques exemples:

Si je reçois 1.5 je veux 2 mais si je reçois 2.0 je veux 2 (et pas 3)

Faire number.round(0) + 1 ne fonctionne pas.

Je pourrais écrire une fonction pour faire cela, mais je suis sûr qu'il en existe déjà un.

Si, néanmoins, il n'existe pas, où dois-je créer ma casquette de la fonction?

79voto

gnovice Points 70970

Essayez ceil :

  1.5.ceil => 2
 2.0.ceil => 2
 

11voto

Patrick McDonald Points 20645

Qu'en est-il de number.ceil ?

Cela retourne le plus petit entier supérieur ou égal à nombre.

Faites attention si vous utilisez ceci avec des nombres négatifs, assurez-vous que cela correspond à ce que vous attendez:

 1.5.ceil      #=> 2
2.0.ceil      #=> 2
(-1.5).ceil   #=> -1
(-2.0).ceil   #=> -2
 

11voto

meso_2600 Points 342

.ceil est bon, mais souvenez-vous, même la plus petite valeur de float causera ceci:

 a = 17.00000000000002
17.0
a.ceil
18
 

6voto

Pesto Points 16648

Utilisez Numérique # ceil :

 irb(main):001:0> 1.5.ceil
=> 2
irb(main):002:0> 2.0.ceil
=> 2
irb(main):003:0> 1.ceil
=> 1
 

3voto

Leonardo Herrera Points 4079

Ne comprends pas. Je vois dans la documentation de base qu'il ya un round() méthode dans le Float classe.

flt.round => entier

Arrondit à l'entier le plus proche. Équivalent à:

 def round
    return (self+0.5).floor if self > 0.0
    return (self-0.5).ceil  if self < 0.0
    return 0    
end

1.5.round      #=> 2    (-1.5).round   #=> -2
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X