遇到一个小小的语法问题

pollyduan · 2022-09-29 19:45:01 · 2267 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-09-29 19:45:01 的主题,其中的信息可能已经有所发展或是发生改变。

package main

import (
    "fmt"
)

func main() {
    var n int

    // Illegal
    n = int(float64(2.5))

    //ok
    var f = float64(2.5)
    n = int(f)

    fmt.Printf("%T=%v,%T=%v\n", n, n, f, f)
}

没想明白为什么?谁知道问题如何理解?

不要告诉我:就是这样,哪样?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2267 次点击  
加入收藏 微博
4 回复  |  直到 2022-10-07 22:32:19
sanrentai
sanrentai · #1 · 3年之前

上面的2.5是常量值,下面的f是变量值

GO_go_GO1
GO_go_GO1 · #2 · 3年之前

image.png

zjsegzhf
zjsegzhf · #3 · 3年之前

A constant value x can be converted to type T if x is representable by a value of T.

float64(2.5)是常量,常量类型转换需要常量能够被那个类型所表示,显然,2.5不能被int所表示。

f是变量,强转没有这个限制。

pollyduan
pollyduan · #4 · 3年之前
zjsegzhfzjsegzhf #3 回复

[A constant value x can be converted to type T if x is representable by a value of T.](https://go.dev/ref/spec#Conversions) float64(2.5)是常量,常量类型转换需要常量能够被那个类型所表示,显然,2.5不能被int所表示。 f是变量,强转没有这个限制。

不错不错,感谢回复,已经搞清楚

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传