2009-05-19 13 views
40

Me gustaría "tapar" un número en Ruby (on Rails).Cómo tapar y redondear el número en ruby ​​

Por ejemplo, tengo, como resultado de una función, un flotador pero necesito un int.

que tienen instrucciones muy específicas, he aquí algunos ejemplos:

Si consigo 1.5 Quiero 2 pero si consigo 2.0 quiero 2 (y no 3)

Haciendo number.round(0) + 1 no va a funcionar.

Podría escribir una función para hacer esto, pero estoy seguro de que ya existe.

Si, sin embargo, no existe, ¿dónde debería crear mi función de tapa?

Respuesta

78

Trate ceil:

1.5.ceil => 2 
2.0.ceil => 2 
+7

1.1.ceil => 2 (otro ejemplo) – Patrick

11

¿Qué tal number.ceil?

Esto devuelve el número entero más pequeño mayor o igual que el número.

Tenga cuidado si usted está usando esto con números negativos, asegúrese de que hace lo que espera:

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

Uso 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 es lo que quiere para números positivos. Asegúrese de considerar el comportamiento de los números negativos. Es decir, ¿quiere -1.5 "tope" a -1 o -2?

11

.ceil es bueno, pero recuerda que, incluso en el valor más pequeño flotador hará que esto:

a = 17.00000000000002 
17.0 
a.ceil 
18 
Cuestiones relacionadas