【发布时间】:2014-10-24 09:54:46
【问题描述】:
为什么这段代码无法编译?
package main
const a = 1.000001
const base = 0
const b = a+base
func main() {
f(b)
}
func f(int) {}
$ go run a.go
# command-line-arguments
./a.go:4: constant 1 truncated to integer
是说1被截断了?或者那个 1 不能被截断?它在说哪一个?
有人回答上述代码无法编译,因为b 是float64。但是为什么会这样编译:
package main
import "fmt"
const a = 1.000001
const b = a-0.000001
func main() {
fmt.Printf("%T %v\n",a,a)
fmt.Printf("%T %v\n",b,b)
f(b)
}
func f(int) {}
$ go run a.go
float64 1.000001
float64 1
? b 在这里是float64,但可以传递给f。
【问题讨论】:
标签: types go weak-typing