为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
海绵宝宝撒 2023-07-31 14:58:34
以下代码在“ 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个赞

常量的转换遵循与非常量的转换不同的规则。

第一个非常数:

数值类型之间的转换

对于非常量数值的转换,适用以下规则:

  1. ...

  2. 将浮点数转换为整数时,小数部分将被丢弃(向零截断)。

  3. ...

所以这是可能的:

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),因此它是非法的。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信