Comment effectuer une division dans Go


88

J'essaye d'effectuer une division simple en Go.

fmt.Println(3/10)

Cela imprime 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 souhaite effectuer différentes opérations arithmétiques dans Go.

Merci

Réponses:


89

L'expression 3 / 10est une expression constante non typée. La spécification le dit à 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 utilisent le genre qui apparaît plus loin dans cette liste: entier, rune, virgule flottante, complexe.

Étant donné que 3et 10sont des constantes entières non typées, la valeur de l'expression est un entier non typé ( 0dans ce cas).

L'un des opérandes doit être une constante à virgule flottante pour que le résultat soit 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 évaluent à la float64constante 0.3:

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

L'impression de l'une des expressions ci-dessus s'imprimera 0.3. Par exemple, fmt.Println(3.0 / 10)imprime 0.3.


je prends des entrées en supposant qu'il s'agit d'un pourcentage. Par exemple, si l'utilisateur donne 30, je dois effectuer 30/100 * somenumber. L'entrée sera toujours un entier. Comment effectuer la division dans ce scénario?
Vrushank Doshi

Convertissez les entiers en nombres à virgule flottante.
Muffin Top

j'ai essayé fmt.Println (float64 (3/10)) mais ça me donne 0
Vrushank Doshi

7
@VrushankDoshi: fmt.Println(float64(3) / float64(10))donne 0.3.
peterSO

21

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 une virgule flottante.

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

Exemple


Oui! juste le premier opérande
SMMousavi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.