我正在尝试在Go中执行简单的划分。
fmt.Println(3/10)
这将打印0而不是0.3。这有点奇怪。有人可以分享这背后的原因吗?我想在Go中执行不同的算术运算。
谢谢
Answers:
该表达式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)
prints 0.3
。
fmt.Println(float64(3) / float64(10))
给0.3
。