2013-04-18 15 views

risposta

20

% dovrebbe funzionare

variable % 1 != 0

Scegli questa fiddle

Edit: Ecco un rubyfiddle

+0

Funziona se ci sono solo numeri e metà – Melki

+0

@Melki scusa non ti ho seguito – karthikr

+0

@karthilkr Vuole solo il numero con '.5' se prendi' a = 1.2' avrai '1.2% 1! = 0 'ma non c'è' .5' in '1.2' – Melki

7

myValue == myValue.floor

o se si vuole veramente controllare specificamente per 0,5, 1,5 ecc

myValue - myValue.floor == 0.5

+0

Ha, la tua risposta non richiede nemmeno la conoscenza del rubino. xD +1 – noMAD

+1

I float non sono esatti: '1.3 - 1 == 0.3 # => false' – Stefan

+0

1.5 - 1 == 0.5 comunque, come richiesto nella domanda – paul

2
(2.50).to_s.include?('.5') #=> true 
(2).to_s.include?('.5') #=> false 
-1

Prova

n = 1.5 
# => 1.5 

n - Integer(n) == 0.5 
# => true 
8

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 
+0

Buono per l'introduzione in una nuova libreria. :) –

Problemi correlati