J'essaie d'effectuer une division simple dans Go.
fmt.Println(3/10)
Ceci affiche 0 au lieu de 0,3. C'est un peu bizarre. Quelqu'un pourrait-il s'il vous plaît partager quelle est la raison derrière cela? Je veux effectuer différentes opérations arithmétiques dans Go.
Merci
L'expression 3 / 10
Est une expression constante non typée. La spécification dit ceci à propos des expressions constantes
si les opérandes d'une opération binaire sont différents types de constantes non typées, l'opération et, pour les opérations non booléennes, le résultat utilise le type figurant plus tard dans cette liste: entier, rune, virgule flottante, complexe.
Parce que 3
Et 10
Sont des constantes entières non typées, la valeur de l'expression est un entier non typé (0
Dans ce cas).
L'un des opérandes doit être une constante à virgule flottante pour que le résultat devienne une constante à virgule flottante. Les expressions suivantes correspondent à la constante à virgule flottante non typée 0.3
:
3.0 / 10.0
3.0 / 10
3 / 10.0
Il est également possible d'utiliser des constantes typées. Les expressions suivantes correspondent à la constante float64
0.3
:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
L'impression de n'importe laquelle des expressions ci-dessus affichera 0.3
. Par exemple, fmt.Println(3.0 / 10)
imprime 0.3
.
Comme mentionné par @ Cerise et selon les spécifications
Les opérateurs arithmétiques s'appliquent aux valeurs numériques et donnent un résultat du même type que le premier opérande.
Dans ce cas, seul le premier opérande doit être un point flottant.
fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3