gpt4 book ai didi

go - 为什么 int64(1.1*float64(time.Minute)) 是错误而 int64(0.5*float64(time.Minute)) 不在 golang 1.9.2 中?

转载 作者:数据小太阳 更新时间:2023-10-29 03:23:53 25 4
gpt4 key购买 nike

我在 golang 1.9.2 中遇到了一个非常奇怪的错误:当我尝试编写 int64(1.1*float64(time.Minute)) 时显示错误。编译器说常量被截断为整数。

但是当我将 1.1 更改为其他 float (如 1.2 0.5 1.7)时,它会编译!

而且当我这样写的时候它也可以编译:

value:=1.1*float64(time.Minute)
fmt.Println(int64(value))

这是go本身的一些错误吗?我在 ubuntu14.04 x64 上运行 go

最佳答案

常量 1.1*float64(time.Minute)有小数部分(值大约为 6.600000000000001e+10)。

specification says this about constant expressions :

The values of typed constants must always be accurately representable by values of the constant type.

常量表达式 int64(1.1*float64(time.Minute))编译失败,因为 int64不能表示数字,因为它有小数部分。

1.2 * float64(time.Minute) , 0.5 * float64(time.Minute)1.7 * float64(time.Minute)可以转换为 int64在常量表达式中,因为这些值没有小数部分。

以下代码片段编译是因为变量 value 的转换至 int64不是常量表达式。

value:=1.1*float64(time.Minute)
fmt.Println(int64(value))

关于go - 为什么 int64(1.1*float64(time.Minute)) 是错误而 int64(0.5*float64(time.Minute)) 不在 golang 1.9.2 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47568254/

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