以下代码在“ var a int = int(1.333) ”行上引发错误“常量截断为整数”。我是 GO 新手,无法找出实际问题。package mainimport ( "fmt" "math")func main() { var x, y int = 3, 4 const k float64=2.2 var a int = int(1.333) var f float64 = math.Sqrt(float64(x*x+y*y)) var z uint = uint(f) fmt.Println(x, y, z,a)}
1 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
常量的转换遵循与非常量的转换不同的规则。
第一个非常数:
数值类型之间的转换
对于非常量数值的转换,适用以下规则:
...
将浮点数转换为整数时,小数部分将被丢弃(向零截断)。
...
所以这是可能的:
var f = float64(1.333) var i = int(f)
现在常数:
如果 x 可以用 T 的值表示,则常量值 x 可以转换为类型T。
然后,在文档中,有一个示例表达式列表,其中之一是:
int(1.2) // illegal: 1.2 cannot be represented as an int
论代表性
如果满足以下条件之一,则常量 x 可由类型 T 的值表示:
x 位于由 T 确定的值集中。
T 是浮点类型,x 可以舍入到 T 的精度而不会溢出。舍入使用 IEEE 754 舍入到偶数规则,但 IEEE 负零进一步简化为无符号零。请注意,常量值永远不会导致 IEEE 负零、NaN 或无穷大。
T 是复数类型,x 的分量 real(x) 和 imag(x) 可通过 T 的分量类型(float32 或 float64)的值表示。
这 3 个条件都不适用于该表达式var a int = int(1.333)
,因此它是非法的。
- 1 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消