Na przykład:
9 / 5 #=> 1
ale się spodziewałem 1.8
. Jak uzyskać poprawny wynik dziesiętny (nie całkowity)? Dlaczego w ogóle wraca 1
?
Na przykład:
9 / 5 #=> 1
ale się spodziewałem 1.8
. Jak uzyskać poprawny wynik dziesiętny (nie całkowity)? Dlaczego w ogóle wraca 1
?
def method; a - b/8; end
zwróci wynik obliczenia z metody, ponieważ ostatnim wyrażeniem w wywołaniu metody jest wartość zwracana.Odpowiedzi:
Robi podział na liczby całkowite. Możesz zrobić jedną z liczb a
Float
, dodając.0
:źródło
.to_f
Odpowiedź brzmi lepiej jeśli dzieląc dwie zmienne, które zawierają liczby całkowite, npa.to_f / b
. Jeśli dosłownie dzielisz dwie zakodowane liczby całkowite (co jest prawdopodobnie dziwne), użycie9.0 / 5
jest w porządku.Robi podział na liczby całkowite. Możesz użyć,
to_f
aby wymusić przejście w tryb zmiennoprzecinkowy:Działa to również, jeśli twoje wartości są zmiennymi zamiast literałów. Konwersja jednej wartości na liczbę zmiennoprzecinkową jest wystarczająca, aby przekonać całe wyrażenie do arytmetyki zmiennoprzecinkowej.
źródło
Istnieje również
Numeric#fdiv
metoda, której możesz użyć zamiast tego:źródło
Możesz to sprawdzić za pomocą irb:
źródło
Możesz dołączyć
mathn
moduł ruby .W ten sposób będziesz mógł normalnie dokonać podziału.
W ten sposób otrzymujesz dokładny podział (klasa wymierna), dopóki nie zdecydujesz się zastosować operacji, która nie może być wyrażona na przykład jako wymierna
Math.sin
.źródło
Zmień
5
TO5.0
. Otrzymujesz podział na liczby całkowite.źródło
Fixnum # to_r nie jest tutaj wymienione, zostało wprowadzone od wersji Ruby 1.9. Przekształca Fixnum w racjonalną formę. Poniżej znajdują się przykłady jego zastosowań. Może to również dać dokładny podział, o ile wszystkie użyte liczby to Fixnum.
Przykład, w którym liczba zmiennoprzecinkowa działająca na liczbie wymiernej obejmuje wynik do liczby zmiennoprzecinkowej.
źródło