我遇到了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
答案 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
,因为这些值没有小数部分。
编译以下代码段是因为从变量value
到int64
的转换不是常量表达式。
value:=1.1*float64(time.Minute)
fmt.Println(int64(value))