Beispielsweise:
9 / 5 #=> 1
aber ich habe erwartet 1.8
. Wie kann ich das richtige Dezimalergebnis (nicht ganzzahlig) erhalten? Warum kehrt es 1
überhaupt zurück?
Beispielsweise:
9 / 5 #=> 1
aber ich habe erwartet 1.8
. Wie kann ich das richtige Dezimalergebnis (nicht ganzzahlig) erhalten? Warum kehrt es 1
überhaupt zurück?
def method; a - b/8; end
würde einfach das Ergebnis der Berechnung von der Methode zurückgeben, da der letzte Ausdruck in einem Methodenaufruf der Rückgabewert ist.Antworten:
Es macht eine ganzzahlige Division. Sie können eine der Zahlen a machen,
Float
indem Sie Folgendes hinzufügen.0
:quelle
.to_f
Antwort ist besser, wenn Sie zwei Variablen teilen, die Ganzzahlen enthalten, za.to_f / b
. Wenn Sie buchstäblich zwei fest codierte Ganzzahlen teilen (was wahrscheinlich seltsam ist), ist die Verwendung9.0 / 5
in Ordnung.Es macht eine ganzzahlige Division. Sie können verwenden
to_f
, um Dinge in den Gleitkommamodus zu zwingen:Dies funktioniert auch, wenn Ihre Werte Variablen anstelle von Literalen sind. Das Konvertieren eines Werts in ein Gleitkomma reicht aus, um den gesamten Ausdruck in Gleitkomma-Arithmetik zu zwingen.
quelle
Es gibt auch die
Numeric#fdiv
Methode, die Sie stattdessen verwenden können:quelle
Sie können es mit irb überprüfen:
quelle
Sie können das Ruby-
mathn
Modul einschließen .Auf diese Weise können Sie die Aufteilung normal vornehmen.
Auf diese Weise erhalten Sie eine exakte Division (Klasse Rational), bis Sie sich entscheiden, eine Operation anzuwenden, die beispielsweise nicht als rational ausgedrückt werden kann
Math.sin
.quelle
Ändern Sie das
5
in5.0
. Sie erhalten eine ganzzahlige Division.quelle
Fixnum # to_r wird hier nicht erwähnt, es wurde seit Ruby 1.9 eingeführt. Es wandelt Fixnum in eine rationale Form um. Nachfolgend finden Sie Beispiele für seine Verwendung. Dies kann auch eine genaue Unterteilung ergeben, solange alle verwendeten Zahlen Fixnum sind.
Beispiel, bei dem ein Float, der mit einer rationalen Zahl betrieben wird, das schwebende Ergebnis verdeckt.
quelle