So führen Sie eine Teilung in Go durch


89

Ich versuche eine einfache Unterteilung in Go durchzuführen.

fmt.Println(3/10)

Dies gibt 0 statt 0,3 aus. Das ist irgendwie komisch. Könnte jemand bitte mitteilen, was der Grund dafür ist? Ich möchte verschiedene arithmetische Operationen in Go ausführen.

Vielen Dank

Antworten:


92

Der Ausdruck 3 / 10ist ein untypisierter konstanter Ausdruck. Die Spezifikation sagt dies über konstante Ausdrücke aus

Wenn die Operanden einer binären Operation verschiedene Arten von untypisierten Konstanten sind, verwenden die Operation und für nicht-boolesche Operationen das Ergebnis die Art, die später in dieser Liste angezeigt wird: Ganzzahl, Rune, Gleitkomma, Komplex.

Da 3und 10untypisierte Ganzzahlkonstanten sind, ist der Wert des Ausdrucks eine untypisierte Ganzzahl ( 0in diesem Fall).

Einer der Operanden muss eine Gleitkommakonstante sein, damit das Ergebnis zu einer Gleitkommakonstante wird. Die folgenden Ausdrücke ergeben die untypisierte Gleitkommakonstante 0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0

Es ist auch möglich, typisierte Konstanten zu verwenden. Die folgenden Ausdrücke werden als float64Konstante ausgewertet 0.3:

float64(3) / float64(10)
float64(3) / 10
3 / float64(10)

Wenn Sie einen der oben genannten Ausdrücke drucken, wird gedruckt 0.3. Zum Beispiel fmt.Println(3.0 / 10)druckt 0.3.


Ich nehme Input unter der Annahme, dass es Prozentsatz ist. Zum Beispiel, wenn der Benutzer 30 gibt, muss ich 30/100 * somenumber ausführen. Die Eingabe ist immer eine Ganzzahl. Wie wird in diesem Szenario eine Teilung durchgeführt?
Vrushank Doshi

Konvertieren Sie die Ganzzahlen in Gleitkommazahlen.
Cerise Limón

Ich habe versucht, fmt.Println (float64 (3/10)), aber es gibt mir 0
Vrushank Doshi

7
@VrushankDoshi: fmt.Println(float64(3) / float64(10))gibt 0.3.
PeterSO

22

Wie von @Cerise und gemäß Spezifikation erwähnt

Arithmetische Operatoren gelten für numerische Werte und ergeben ein Ergebnis des gleichen Typs wie der erste Operand.

In diesem Fall muss nur der erste Operand ein Gleitkomma sein.

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3

Beispiel


Ja! gerade erster Operand
SMMousavi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.