web-dev-qa-db-fra.com

Comment effectuer la division dans Go

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

65
Vrushank Doshi

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 float640.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.

73
Cerise Limón

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

Exemple

12
robstarbuck