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

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.


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


¡Si! solo primer operando
SMMousavi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.