2013-04-18 13 views

Odpowiedz

20

% powinien działać

variable % 1 != 0

Sprawdź to fiddle

Edit: Oto rubyfiddle

+0

Działa, jeśli są tylko liczby i połówki – Melki

+0

@Melki przepraszam, że Cię nie śledziłem – karthikr

+0

@karthilkr On chce tylko liczby z '.5', jeśli weźmiesz' a = 1,2' będziesz miał '1,2% 1! = 0 'ale nie ma' .5' w '1.2' – Melki

7

myValue == myValue.floor

lub jeśli naprawdę chcesz sprawdzić specjalnie do 0,5, 1,5 itp.

myValue - myValue.floor == 0.5

+0

Ha, twoja odpowiedź nie wymagała nawet znajomości ruby. xD +1 – noMAD

+1

Pętle są niedokładne: '1.3 - 1 == 0.3 # => fałsz' – Stefan

+0

1.5 - 1 == 0.5 jednak, jak pytano w pytaniu – paul

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

Spróbuj

n = 1.5 
# => 1.5 

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

Zawsze używaj BigDecimal sprawdzić ułamkową część liczby, aby uniknąć floating point errors:

require 'bigdecimal' 

BigDecimal.new(number).frac == BigDecimal("0.5") 

Na przykład:

BigDecimal.new("0.5").frac == BigDecimal("0.5") 
# => true 

BigDecimal.new("1.0").frac == BigDecimal("0.5") 
# => false 

i bardziej ogólne rozwiązanie, aby zobaczyć czy jest cały szereg:

BigDecimal.new("1.000000000000000000000000000000000000000001").frac.zero? 
# => false 
+0

Dobry do wprowadzenia do nowej biblioteki. :) –

Powiązane problemy