Vru*_*shi 69 math floating-point go integer-division
我想在Go中执行一个简单的划分.
fmt.Println(3/10)
Run Code Online (Sandbox Code Playgroud)
这打印0而不是0.3.这有点奇怪.有人可以分享一下这背后的原因是什么?我想在Go中执行不同的算术运算.
谢谢
Cer*_*món 74
表达式3 / 10是无类型常量表达式.规范 说明了常量表达式
如果二元运算的操作数是不同类型的无类型常量,则操作和对于非布尔运算,结果使用此列表中稍后出现的类型:整数,符文,浮点数,复数.
因为3和10是无类型的整数常量,所以表达式的值是无类型整数(0在本例中).
其中一个操作数必须是浮点常量,结果为浮点常量.以下表达式求值为无类型浮点常量0.3:
3.0 / 10.0
3.0 / 10
3 / 10.0
Run Code Online (Sandbox Code Playgroud)
也可以使用类型常量.以下表达式求值为float64常量0.3:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
Run Code Online (Sandbox Code Playgroud)
将打印上述任何表达式0.3.例如,fmt.Println(3.0 / 10)打印0.3.
rob*_*uck 12
正如@Cerise和规范所述
算术运算符应用于数值,并产生与第一个操作数相同类型的结果.
在这种情况下,只有第一个操作数需要是一个浮点.
fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3
Run Code Online (Sandbox Code Playgroud)