Desidero verificare specificamente se un dato numero contiene ".5"Come verificare se il numero ha un decimale?
Mi occupo solo di numeri interi e metà (0,5, 1, 1,5, ecc.).
Desidero verificare specificamente se un dato numero contiene ".5"Come verificare se il numero ha un decimale?
Mi occupo solo di numeri interi e metà (0,5, 1, 1,5, ecc.).
myValue == myValue.floor
o se si vuole veramente controllare specificamente per 0,5, 1,5 ecc
myValue - myValue.floor == 0.5
(2.50).to_s.include?('.5') #=> true
(2).to_s.include?('.5') #=> false
Prova
n = 1.5
# => 1.5
n - Integer(n) == 0.5
# => true
utilizzare sempre BigDecimal
controlla la parte frazionaria di un numero per evitare floating point errors:
require 'bigdecimal'
BigDecimal.new(number).frac == BigDecimal("0.5")
Ad esempio:
BigDecimal.new("0.5").frac == BigDecimal("0.5")
# => true
BigDecimal.new("1.0").frac == BigDecimal("0.5")
# => false
e una soluzione più generale per vedere se un numero è intero:
BigDecimal.new("1.000000000000000000000000000000000000000001").frac.zero?
# => false
Buono per l'introduzione in una nuova libreria. :) –
4 downvotes senza un commento? – Stefan