Maison >développement back-end >Golang >Pourquoi l'opération de division de Go (/) renvoie-t-elle parfois 0 au lieu d'un nombre décimal ?
Opération de division en Go
En Go, l'opération de division (/) s'effectue différemment selon les types de ses opérandes. Pour comprendre pourquoi l'expression fmt.Println(3 / 10) donne 0 au lieu de 0,3, examinons le système de types de Go.
Les opérandes de cette expression sont des constantes entières non typées, et selon le Go spécification du langage, le résultat des opérations arithmétiques avec des constantes non typées est déterminé par l'ordre dans lequel les types apparaissent. Les constantes entières précèdent les constantes à virgule flottante, l'expression est donc évaluée comme une division entière, ce qui donne 0.
Pour obtenir un résultat à virgule flottante, au moins un des opérandes doit être une constante à virgule flottante. Pour y parvenir, on peut écrire 3,0/10,0, 3,0/10 ou 3/10,0. Les deux premières expressions utilisent des constantes à virgule flottante non typées, tandis que la dernière expression convertit la constante entière 3 en float64.
De plus, lorsqu'un opérande a une constante non typée et que l'autre est un opérande typé, le type de l'expression est déterminée par l'opérande tapé. Par conséquent, var i3 = 3 et var i10 = 10 peuvent être convertis en float64 en utilisant fmt.Println(float64(i3) / float64(i10)).
Notez que les littéraux numériques comme 10.0 sont des constantes à virgule flottante non typées , et des expressions comme i3 / 10.0 et 3.0 / i10 seraient toujours évaluées comme une division entière car de l'opérande typé (i3 et i10) déterminant le type de résultat.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!