Как выполнять деление в го

88

Я пытаюсь выполнить простое деление в Go.

fmt.Println(3/10)

Это печатает 0 вместо 0,3. Это как-то странно. Может ли кто-нибудь поделиться, в чем причина этого? я хочу выполнять различные арифметические операции в Go.

Благодарность

Врушанк Доши
источник

Ответы:

89

Выражение 3 / 10представляет собой нетипизированное постоянное выражение. В спецификации сказано это о постоянных выражениях

если операнды бинарной операции представляют собой разные типы нетипизированных констант, операция и, для небулевых операций, результат использует тип, который появляется позже в этом списке: целое число, руна, с плавающей запятой, комплексный.

Поскольку 3и 10являются нетипизированными целочисленными константами, значение выражения является нетипизированным целым числом ( 0в данном случае).

Один из операндов должен быть константой с плавающей запятой, чтобы результат был константой с плавающей запятой. Следующие выражения вычисляют нетипизированную константу с плавающей запятой 0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0

Также можно использовать типизированные константы. Следующие выражения вычисляют float64константу 0.3:

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

Печать любого из приведенных выше выражений будет напечатана 0.3. Например, fmt.Println(3.0 / 10)принты 0.3.

Верхушка кекса
источник
Я беру данные, предполагая, что это процент. Например, если пользователь дает 30, я должен выполнить 30/100 * somenumber. Ввод всегда будет целым числом. Как выполнить деление в этом сценарии?
Врушанк Доши
Преобразуйте целые числа в числа с плавающей запятой.
Muffin Top
Я пробовал fmt.Println (float64 (3/10)), но он дает мне 0
Врушанк Доши
7
@VrushankDoshi: fmt.Println(float64(3) / float64(10))дает 0.3.
peterSO
21

Как упоминалось @Cerise и согласно спецификации

Арифметические операторы применяются к числовым значениям и дают результат того же типа, что и первый операнд.

В этом случае только первый операнд должен быть с плавающей точкой.

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3

пример

Robstarbuck
источник
Да! только первый операнд
SMMousavi