Pregunta Cómo realizar la división en Go


Estoy tratando de realizar una división simple en Go.

fmt.Println(3/10)

Esto imprime 0 en vez de 0.3. Esto es un poco raro ¿Podría alguien compartir cuál es la razón detrás de esto? Quiero realizar diferentes operaciones aritméticas en Go.

Gracias


33
2017-09-28 03:46


origen


Respuestas:


La expresion 3 / 10 es una expresión constante sin tipo. La especificación dice esto sobre expresiones constantes

si los operandos de una operación binaria son diferentes tipos de constantes sin tipo, la operación y, para operaciones no booleanas, el resultado utiliza el tipo que aparece más adelante en esta lista: entero, runa, coma flotante, complejo.

Porque 3 y 10 son constantes enteras sin tipo, el valor de la expresión es un entero sin tipo (0 en este caso).

Uno de los operandos debe ser una constante de coma flotante para el resultado a una constante de coma flotante. Las siguientes expresiones se evalúan a la constante de punto flotante sin tipo 0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0

También es posible usar constantes tipadas. Las siguientes expresiones evalúan al float64 constante 0.3:

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

Imprimiendo cualquiera de las expresiones anteriores se imprimirá 0.3. Por ejemplo, fmt.Println(3.0 / 10) huellas dactilares 0.3.


47
2017-09-28 04:01



Como se menciona por @Cereza y por la especificación

Los operadores aritméticos se aplican a los valores numéricos y producen un resultado de la mismo tipo que el primer operando.

En este caso solo el primer operando necesita ser un punto flotante

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

Ejemplo


4
2017-12-27 21:28