Я пытаюсь выполнить простое деление в Go.
fmt.Println(3/10)
Это печатает 0 вместо 0,3. Это как-то странно. Может ли кто-нибудь поделиться, в чем причина этого? я хочу выполнять различные арифметические операции в Go.
Благодарность
источник
Я пытаюсь выполнить простое деление в Go.
fmt.Println(3/10)
Это печатает 0 вместо 0,3. Это как-то странно. Может ли кто-нибудь поделиться, в чем причина этого? я хочу выполнять различные арифметические операции в Go.
Благодарность
Выражение 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
.
fmt.Println(float64(3) / float64(10))
дает0.3
.Как упоминалось @Cerise и согласно спецификации
В этом случае только первый операнд должен быть с плавающей точкой.
fmt.Println(3.0/10) fmt.Println(float64(3)/10) // 0.3 0.3
пример
источник