Подтвердить что ты не робот

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

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

fmt.Println(3/10)

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

Спасибо

4b9b3361

Ответ 1

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

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

Поскольку 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.

Ответ 2

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

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

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

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

Пример