math - what - is 0 0 1
Cómo realizar la división en Go (2)
Estoy tratando de realizar una división simple en Go.
fmt.Println(3/10)
Esto imprime 0 en lugar 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
La expresión 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.
Debido a que
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 de una constante de coma flotante.
Las siguientes expresiones evalúan 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 escritas.
Las siguientes expresiones evalúan la constante
float64
0.3
:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
Imprimir cualquiera de las expresiones anteriores imprimirá
0.3
.
Por ejemplo,
fmt.Println(3.0 / 10)
imprime
0.3
.
Según lo mencionado por @Cerise y según las especificaciones
Los operadores aritméticos se aplican a valores numéricos y producen un resultado del mismo tipo que el primer operando.
En este caso, solo el primer operando debe ser un punto flotante.
fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3