ruby-on-rails - pasar - fraccion generatriz
obtener parte de la fracción de un número decimal (8)
... "1.23" y quiero obtener "23".
Solo remueve la parte entera y multiplica por 100.
((number - number.to_i) * 100).to_i
Estoy tratando de obtener una parte fraccionaria de un número decimal en los carriles. Por ejemplo, tengo un número, ese "1.23" y quiero obtener "23" Puede que sea demasiado fácil, pero, ¿alguien tiene alguna idea de cómo puedo hacerlo?
Decidir la solución adecuada requiere comprender el tipo con el que está trabajando. Si sus valores son Flotante (el tipo estándar para números no completos en Ruby), las respuestas lógicamente correctas como mod(1)
pueden producir resultados inesperados debido a errores de punto flotante . Para cualquier caso en el que Float sea el tipo de datos adecuado para usar en primer lugar, es probable que esto sea aceptable.
Si los errores de punto flotante no son aceptables, ¡no use Float
! Ruby viene con la gran clase BigDecimal
, que es mucho más precisa a costa del rendimiento y una sintaxis un poco más detallada.
decimal = BigDecimal.new("1.23")
decimal.frac #=> 0.23
Después de intentarlo todo ... siento que la mejor respuesta es (num - num.to_i).abs
porque también funciona con números negativos.
p.ej
(1.23 - 1.23.to_i) .abs = 0.23
(-1.23 - -1.23.to_i) .abs = 0.23
No estoy seguro de si es la forma más fácil de hacerlo, pero simplemente puede dividir el número usando "." personaje - como este
number = 1.23
parts = number.to_s.split(".")
result = parts.count > 1 ? parts[1].to_s : 0
Si conoce la precisión deseada, esto podría ser un poco más rápido para esta solución.
1.1234.modulo(1).round(4) #0.1234
Trate de usar el método de módulo:
1.23.modulo(1) => 0.23
Lea más aquí: http://www.ruby-doc.org/core-1.9.3/Numeric.html#method-i-modulo
O puede convertir flotante en entero y restarlo del valor flotante original.
1.23 - 1.23.to_i => 0.23
a=1.23 #value of a will be 1.23
a=a-a.to_i #value of a will be 0.23
n = 1.23
n.modulo(1)
=> 0.22999999999999998
n - n.to_i
=> 0.22999999999999998
Recomendado leer http://floating-point-gui.de/