Heim >Datenbank >MySQL-Tutorial >Warum ergibt die Ganzzahldivision Null statt eines Dezimalwerts?
Unerwartetes Nullergebnis der Ganzzahldivision
Während eines kürzlich durchgeführten Programmierprojekts führte der folgende Code zu einem unerwarteten Ergebnis:
<code>PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2; PRINT @weight</code>
Die Division ergab 0 statt der erwarteten 0,073667712.
Die Hauptursache: Ganzzahlige Datentypen
Das Problem ergibt sich aus den Datentypen @set1
und @set2
. Beide sind Ganzzahlen, die nur ganze Zahlen speichern können. Bei der Ganzzahldivision wird immer der Dezimalteil abgeschnitten, was zu einem ganzzahligen Ergebnis führt. Daher ergibt 47 dividiert durch 638 0.
Lösungen
Um das korrekte Dezimalergebnis zu erhalten, stehen zwei Ansätze zur Verfügung:
Variablen als Floats definieren: @set1
und @set2
als Gleitkommazahlen (Floats) deklarieren. Dadurch können die Variablen Dezimalwerte speichern und so eine genaue Dezimalteilung gewährleisten.
Typumwandlung während der Berechnung: Wenn eine Änderung variabler Datentypen nicht möglich ist, verwenden Sie den Operator CAST
, um die Ganzzahlen während der Division vorübergehend in Gleitkommazahlen umzuwandeln:
<code>SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);</code>
Beide Methoden garantieren, dass die Divisionsoperation den erwarteten Dezimalwert zurückgibt, wodurch das Problem des unerwarteten Nullergebnisses behoben wird.
Das obige ist der detaillierte Inhalt vonWarum ergibt die Ganzzahldivision Null statt eines Dezimalwerts?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!