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

时间:2017-11-30 07:41:30

标签: go

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

但是当我将1.1更改为1.2 0.5 1.7之类的其他浮动时,它会编译!

当我写它时,它也可以编译:

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

这是一个自己的错误吗?我跑去了ubuntu14.04 x64

1 个答案:

答案 0 :(得分:0)

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

specification says this about constant expressions

  

类型常量的值必须始终可以由常量类型的值准确表示。

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

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

编译以下代码段是因为从变量valueint64的转换不是常量表达式。

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