2011-08-29 27 views
8

Necesito redondear a la décima más cercana. Lo que necesito es ceil pero con precisión hasta el primer decimal.¿Redondea al décimo más cercano?

Ejemplos:

10.38 would be 10.4 
10.31 would be 10.4 
10.4 would be 10.4 

Por lo tanto si se trata de cualquier cantidad pasado una décima completos, debe ser redondeado.

Estoy ejecutando Ruby 1.8.7.

Respuesta

26

Esto funciona en general:

ceil(number*10)/10 

Así que en Ruby, así debería ser:

(number*10).ceil/10.0 
+1

Esto es lo que hago, pero me gustaría que hubiera una manera nativa para hacer esto , como rodeo (1) o algo así. – mjnissim

+0

¿Cómo lo lograrías por dos decimales (como por dinero?) EDITAR: Derp. (3.191 * 100) .ceil/100.0 me estaba dando 3.2. Eso es correcto, 3.20. Simplemente no mostraba el 0 adicional. – gregblass

3

Si ha ActiveSupport disponible, se añade un método redonda:

3.14.round(1) # => 3.1 
3.14159.round(3) # => 3.142 

La fuente es la siguiente:

def round_with_precision(precision = nil) 
    precision.nil? ? round_without_precision : (self * (10 ** precision)).round/(10 ** precision).to_f 
end 
método redonda
+8

Esto redondea al DÉCIMO MÁS CERCANO, no hasta el décimo más cercano que el OP. – brittohalloran

5

de Ruby puede consumir precisiones:

10.38.round(1) # => 10.4 

En este caso se obtiene 1 de redondear a la décima más cercana.

+0

Recomendaría esta respuesta en 1.9.3 y superior (http://ruby-doc.org/core-1.9.3/Float.html#method-i-round). Ruby 1.8.7 y versiones anteriores solo redondeadas a valores enteros (http://ruby-doc.org/core-1.8.7/Float.html#method-i-round). – GSP

+2

10.31.round (1) => 10.3 y no 10.4, como pidió el OP. – Anjan

2

para redondear a la décima más cercana en Ruby que podría hacer

(number/10.0).ceil*10

(12345/10.0).ceil*10 # => 12350