Cómo realizar la división en Go

88

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

Vrushank Doshi
fuente

Respuestas:

89

La expresión 3 / 10es 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 utilizan el tipo que aparece más adelante en esta lista: entero, runa, punto flotante, complejo.

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

Uno de los operandos debe ser una constante de coma flotante para que el resultado sea 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 utilizar constantes escritas. Las siguientes expresiones se evalúan a la float64constante 0.3:

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

La impresión de cualquiera de las expresiones anteriores se imprimirá 0.3. Por ejemplo, fmt.Println(3.0 / 10)grabados 0.3.

Muffin Top
fuente
Estoy tomando información asumiendo que es un porcentaje. Por ejemplo, si el usuario da 30, tengo que realizar un número 30/100 *. La entrada siempre será un número entero. ¿Cómo realizar la división en este escenario?
Vrushank Doshi
Convierta los enteros en números de coma flotante.
Muffin Top
Intenté fmt.Println (float64 (3/10)) pero me da 0
Vrushank Doshi
7
@VrushankDoshi: fmt.Println(float64(3) / float64(10))da 0.3.
peterSO
20

Como lo menciona @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

Ejemplo

robstarbuck
fuente
¡Si! solo primer operando
SMMousavi