Heim > Backend-Entwicklung > Golang > Wie geht Go mit der Ganzzahldivision um und wie kann ich Gleitkommaergebnisse sicherstellen?

Wie geht Go mit der Ganzzahldivision um und wie kann ich Gleitkommaergebnisse sicherstellen?

Mary-Kate Olsen
Freigeben: 2024-12-02 08:34:14
Original
932 Leute haben es durchsucht

How Does Go Handle Integer Division, and How Can I Ensure Floating-Point Results?

Division in Go verstehen

Im Gegensatz zu anderen Programmiersprachen, die automatisch eine Gleitkomma-Division durchführen, erfordert Go für die Division eine explizite Konvertierung in Gleitkomma Operationen. Dies kann bei der Arbeit mit ganzen Zahlen zu unerwarteten Ergebnissen führen.

Bedenken Sie den folgenden Code:

fmt.Println(3 / 10)
Nach dem Login kopieren

Dadurch wird 0 anstelle der erwarteten 0,3 ausgegeben. Der Grund dafür ist, dass die Operanden 3 und 10 beide untypisierte Ganzzahlkonstanten sind. Gemäß der Go-Sprachspezifikation verwenden die Operation und das Ergebnis den Typ, der später in der Liste erscheint, wenn es sich bei den Operanden einer Binäroperation um unterschiedliche Arten untypisierter Konstanten handelt: Ganzzahl, Rune, Gleitkomma, komplex. In diesem Fall steht die Ganzzahl vor der Gleitkommazahl, sodass das Ergebnis eine untypisierte Ganzzahl (0) ist.

Um ein Gleitkommaergebnis zu erhalten, muss einer der Operanden eine Gleitkommakonstante sein. Bedenken Sie Folgendes:

fmt.Println(3.0 / 10.0)
fmt.Println(3.0 / 10)
fmt.Println(3 / 10.0)
Nach dem Login kopieren

Alle diese Ausdrücke ergeben die untypisierte Gleitkommakonstante 0,3. Indem wir einem Operanden eine .0 hinzufügen, wandeln wir ihn explizit in einen Gleitkommawert um, was zu einem Gleitkommaergebnis führt.

Wenn die Divisionsoperation einen typisierten Operanden umfasst, bestimmt der Typ des typisierten Operanden die Typ des Ausdrucks. Um ein float64-Ergebnis sicherzustellen, sollte der typisierte Operand float64 sein. Zum Beispiel:

var i3 = 3
var i10 = 10
fmt.Println(float64(i3) / 10)
fmt.Println(3 / float64(i10))
Nach dem Login kopieren

Diese Ausdrücke konvertieren die int-Variablen in float64, was zu einem float64-Ergebnis von 0,3 führt.

Es ist wichtig zu beachten, dass numerische Literale wie 10.0 und 3.0 untypisierte Gleitkommazahlen sind -point-Konstanten, nicht float64. Ausdrücke wie i3 / 10.0 und 3.0 / i10 führen weiterhin zu einer Ganzzahl 0, da der typisierte Operand (i3 und i10) den Typ des Ergebnisses bestimmt.

Das obige ist der detaillierte Inhalt vonWie geht Go mit der Ganzzahldivision um und wie kann ich Gleitkommaergebnisse sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage