猿问

将 float 常量类型转换为 int 期间,常量被截断为整数错误

以下代码在“ var a int = int(1.333) ”行上引发错误“常量截断为整数”。我是 GO 新手,无法找出实际问题。


package main


import (

    "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)

}


海绵宝宝撒
浏览 135回答 1
1回答

守候你守候我

常量的转换遵循与非常量的转换不同的规则。第一个非常数:数值类型之间的转换对于非常量数值的转换,适用以下规则:...将浮点数转换为整数时,小数部分将被丢弃(向零截断)。...所以这是可能的: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),因此它是非法的。
随时随地看视频慕课网APP

相关分类

Go
我要回答