Chcę dokładnie sprawdzić, czy podana liczba zawiera ".5"Jak sprawdzić, czy liczba ma dziesiętną?
Mam do czynienia tylko z liczbami całkowitymi i połówkami (0,5, 1, 1,5 itd.).
Chcę dokładnie sprawdzić, czy podana liczba zawiera ".5"Jak sprawdzić, czy liczba ma dziesiętną?
Mam do czynienia tylko z liczbami całkowitymi i połówkami (0,5, 1, 1,5 itd.).
myValue == myValue.floor
lub jeśli naprawdę chcesz sprawdzić specjalnie do 0,5, 1,5 itp.
myValue - myValue.floor == 0.5
(2.50).to_s.include?('.5') #=> true
(2).to_s.include?('.5') #=> false
Spróbuj
n = 1.5
# => 1.5
n - Integer(n) == 0.5
# => true
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
Dobry do wprowadzenia do nowej biblioteki. :) –
4 downvotes bez komentarza? – Stefan