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 / 10
is 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 3
en 10
geheeltallige 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 float64
constante 0.3
:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
Als u een van de bovenstaande uitdrukkingen afdrukt, wordt 0.3
afgedrukt. fmt.Println(3.0 / 10)
drukt bijvoorbeeld 0.3
af.
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