Go 中的浮点除法
尽管除法看起来很简单,但在 Go 中实现此操作可能会遇到意想不到的结果。如提供的示例所示:
fmt.Println(3/10)
此代码片段令人惊讶地生成“0”而不是预期的“0.3”。要理解这种行为,深入研究 Go 类型系统的复杂性至关重要。
在 Go 中,除法运算符的操作数是无类型常量,这意味着它们的数据类型没有明确指定。根据Go规范,当处理无类型常量的二元运算时,结果的数据类型由所涉及类型的优先级决定。在这种情况下,两个操作数都是整数,从而产生值为“0”的无类型整数表达式。
要获得浮点常量结果,其中一个操作数必须显式键入为浮点数。以下是演示这一点的一些示例:
3.0 / 10.0 3.0 / 10 3 / 10.0
在这些表达式中,浮点常量(例如“3.0”)确保结果也是值为“0.3”的浮点常量".
或者,如果一个操作数是类型化变量,则以类型化变量的数据类型为准。例如,以下表达式将整数变量转换为 float64 值并生成“0.3”:
var i3 = 3 var i10 = 10 fmt.Println(float64(i3) / 10) fmt.Println(3 / float64(i10))
以上是为什么 Go 的整数除法结果是 0 而不是浮点数?的详细内容。更多信息请关注PHP中文网其他相关文章!