gpt4 book ai didi

go - 数字常量的打印类型导致溢出

转载 作者:行者123 更新时间:2023-12-01 22:14:04 32 4
gpt4 key购买 nike

我是Go的新手,目前正在关注Go之旅。

我目前在Numeric Constants页面上。以下是该页面上运行的代码的精简版本:

package main
import "fmt"
const Big = 1 << 100
func needFloat(x float64) float64 {
return x * 0.1
}
func main() {
fmt.Println(needFloat(Big))
// fmt.Printf("Type of Big %T", Big)
}

此代码使用输出 1.2676506002282295e+29成功编译

但是,以下代码将无法编译并给出错误:
package main
import "fmt"
const Big = 1 << 100
func needFloat(x float64) float64 {
return x * 0.1
}
func main() {
fmt.Println(needFloat(Big))
fmt.Printf("Type of Big %T", Big)
}

输出: ./prog.go:9:13: constant 1267650600228229401496703205376 overflows int
您为什么认为这发生了?希望您能解释一下。

最佳答案

常量Big是未类型化的常量。无类型的常数可以任意大,并且不必符合任何预定义类型的限制。在使用上下文时会对其进行解释和截断。

函数needFloat获取float64参数。在这种情况下,Big转换为float64并以这种方式使用。

当您将它用于Printf时,它会尝试将其作为int传入,因为它不是十进制数字(否则它将转换为float64),并且会导致溢出。将其作为float64(Big)传递,它应该可以工作。

关于go - 数字常量的打印类型导致溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61581116/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com