Como realizar a divisão em Go


88

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:


89

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 3e 10são constantes inteiras sem tipo, o valor da expressão é um número inteiro sem tipo ( 0neste 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 float64constante 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.


estou pegando entrada supondo que seja porcentagem. Por exemplo, se o usuário der 30, tenho que executar 30/100 * algum número. A entrada sempre será um número inteiro. Como realizar a divisão neste cenário?
Vrushank Doshi

Converta os inteiros em números de ponto flutuante.
Muffin Top

tentei fmt.Println (float64 (3/10)), mas me deu 0
Vrushank Doshi

7
@VrushankDoshi: fmt.Println(float64(3) / float64(10))0.3.
peterSO

20

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

Exemplo


Sim! apenas o primeiro operando
SMMousavi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.