Hoe deling uit te voeren in Go

Ik probeer een eenvoudige deling uit te voeren in Go.

fmt.Println(3/10)

Hiermee drukt u 0 af in plaats van 0,3. Dit is een beetje raar. Zou iemand kunnen vertellen wat hier de reden achter is? ik wil verschillende rekenkundige bewerkingen uitvoeren in Go.

Bedankt


Antwoord 1, autoriteit 100%

De uitdrukking 3 / 10is een niet-getypte constante uitdrukking. De specificatie zegt dit over constante expressies

als de operanden van een binaire bewerking verschillende soorten niet-getypeerde constanten zijn, gebruiken de bewerking en, voor niet-booleaanse bewerkingen, het resultaat het type dat later in deze lijst verschijnt: integer, rune, floating-point, complex.

Omdat 3en 10geheeltallige constanten zonder type zijn, is de waarde van de uitdrukking een geheel getal zonder type (in dit geval 0).

Een van de operanden moet een drijvende-kommaconstante zijn om het resultaat tot een drijvende-kommaconstante te laten worden. De volgende uitdrukkingen evalueren naar de ongetypte drijvende-kommaconstante 0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0

Het is ook mogelijk om getypte constanten te gebruiken. De volgende expressies evalueren de float64constante 0.3:

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

Als u een van de bovenstaande uitdrukkingen afdrukt, wordt 0.3afgedrukt. fmt.Println(3.0 / 10)drukt bijvoorbeeld 0.3af.


Antwoord 2, autoriteit 26%

Zoals vermeld door @Ceriseen volgens de specificaties

Rekenkundige operatoren zijn van toepassing op numerieke waarden en leveren een resultaat op van hetzelfde type als de eerste operand.

In dit geval hoeft alleen de eerste operandeen drijvende komma te zijn.

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

Voorbeeld

Other episodes