2009-05-19 11 views
40

Chciałbym "zamknąć" liczbę w Ruby (na szynach).Jak zakleić i zaokrąglić numer w rubinie

Na przykład, mam w wyniku funkcji float, ale potrzebuję int.

Mam bardzo szczegółowych instrukcji, oto kilka przykładów:

Jeśli dostanę 1.5 chcę 2 ale jeśli dostanę 2.0 Chcę 2 (a nie 3)

Doing number.round(0) + 1 nie będzie działać.

Mogę napisać funkcję, aby to zrobić, ale jestem pewien, że już istnieje.

Jeśli jednak nie istnieje, gdzie powinienem utworzyć funkcję ograniczenia?

Odpowiedz

11

Co powiecie na number.ceil?

Powoduje, że najmniejsza liczba całkowita jest mniejsza lub równa liczbie.

Bądź ostrożny, jeśli używasz to z liczb ujemnych, upewnij się, że robi to, co można się spodziewać:

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

Zastosowanie Numeric#ceil:

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

float.ceil jest tym, czego potrzebujesz dla liczb dodatnich. Pamiętaj o zachowaniu liczb ujemnych. To znaczy, czy chcesz, aby -1,5 oznaczało "cap" do -1 lub -2?

11

.ceil jest dobra, ale należy pamiętać, nawet najmniejsza wartość pływak powodować:

a = 17.00000000000002 
17.0 
a.ceil 
18