我正在尝试在 Go 中执行一个简单的除法。fmt.Println(3/10)这将打印 0 而不是 0.3。这有点奇怪。有人可以分享这背后的原因吗?我想在 Go 中执行不同的算术运算。
2 回答
红糖糍粑
TA贡献1815条经验 获得超6个赞
该表达式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.
明月笑刀无情
TA贡献1828条经验 获得超4个赞
正如@Cerise和根据规范所提到的
算术运算符应用于数值并产生与第一个操作数相同类型的结果。
在这种情况下,只有第一个操作数需要是浮点数。
fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3
- 2 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消