2 回复
Go语言不允许对无类型值进行类型转换,字面量 4.4 是一个浮点数,这一点编译器是知道的,但你没有指明是哪种浮点数类型(float64 还是 float32)?类型推断仅在你声明一个具有此值的变量时才起作用:
x := 4.4
var z int = int(x)
这是实用且正确的做法!
更多关于Golang中为什么int(4.4)无法正常工作?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,int(4.4) 无法正常工作是因为类型转换的规则限制。当将浮点数转换为整数时,Go会直接截断小数部分,而不是四舍五入。因此,int(4.4) 的结果是 4,这可能导致不符合预期的行为。
如果你需要四舍五入,可以使用 math.Round 函数。以下是一个示例代码:
package main
import (
"fmt"
"math"
)
func main() {
f := 4.4
// 直接转换,截断小数部分
i := int(f)
fmt.Println("直接转换:", i) // 输出: 4
// 使用 math.Round 四舍五入
rounded := int(math.Round(f))
fmt.Println("四舍五入:", rounded) // 输出: 4
// 另一个例子:4.6 会四舍五入到 5
f2 := 4.6
rounded2 := int(math.Round(f2))
fmt.Println("四舍五入 4.6:", rounded2) // 输出: 5
}
注意:math.Round 返回的是 float64 类型,所以需要再次转换为 int。如果你需要处理负数或更复杂的舍入规则,可以使用 math.Floor 或 math.Ceil 函数。


