Estou tentando realizar uma divisão simples em Go.
fmt.Println(3/10)
Isso imprime 0 em vez de 0,3. Isso é meio estranho. Alguém poderia compartilhar o motivo por trás disso? eu quero realizar diferentes operações aritméticas no Go.
obrigado
Estou tentando realizar uma divisão simples em Go.
fmt.Println(3/10)
Isso imprime 0 em vez de 0,3. Isso é meio estranho. Alguém poderia compartilhar o motivo por trás disso? eu quero realizar diferentes operações aritméticas no Go.
obrigado
Respostas:
A expressão 3 / 10
é uma expressão constante não digitada. A especificação diz isso sobre expressões constantes
se os operandos de uma operação binária são diferentes tipos de constantes não tipadas, a operação e, para operações não booleanas, o resultado usa o tipo que aparece mais tarde nesta lista: inteiro, runa, ponto flutuante, complexo.
Como 3
e 10
são constantes inteiras sem tipo, o valor da expressão é um número inteiro sem tipo ( 0
neste caso).
Um dos operandos deve ser uma constante de ponto flutuante para que o resultado seja uma constante de ponto flutuante. As seguintes expressões são avaliadas como a constante de ponto flutuante não digitada 0.3
:
3.0 / 10.0
3.0 / 10
3 / 10.0
Também é possível usar constantes digitadas. As seguintes expressões são avaliadas para a float64
constante 0.3
:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
Imprimir qualquer uma das expressões acima será impresso 0.3
. Por exemplo, fmt.Println(3.0 / 10)
impressões 0.3
.
fmt.Println(float64(3) / float64(10))
dá 0.3
.
Conforme mencionado por @Cerise e de acordo com as especificações
Os operadores aritméticos se aplicam a valores numéricos e produzem um resultado do mesmo tipo do primeiro operando.
Nesse caso, apenas o primeiro operando precisa ser um ponto flutuante.
fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3