我正在尝试在 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
以获得 float64
结果。
下面的表达式 convert
int
变量到 float64
以获得 float64
结果 0.3
:
var i3 = 3
var i10 = 10
fmt.Println(float64(i3) / 10)
fmt.Println(3 / float64(i10))
注意:数字文字
10.0
和 3.0
是无类型浮点常量,而不是 float64
。表达式 i3 / 10.0
和 3.0 / i10
计算结果为整数 0
,因为类型化操作数(i3
和 i10
)决定结果的类型。