以下GO程序给出错误:
./fft.go:13: constant -6.28319 truncated to integer
./fft.go:13: cannot use -7 * k / N (type int) as type float64 in assignment
程序:
package main
import (
"math"
"fmt"
)
func main() {
fmt.Println("Hello world ",math.E)
var k, N int = 1, 10
var ans float64 = 0
var c float64 = (-2.0 * math.Pi * k) / N
x := make([]float64,N)
for i := 0; i < len(x); i++ {
x[i] = 1
}
ans = 0
for i := 0; i < N; i++ {
ans += x[i] * math.E
}
fmt.Println(ans)
}
为什么我不能在int
类型中使用float64
?
答案 0 :(得分:12)
替换
var c float64 = (-2.0 * math.Pi * k) / N
通过
var c float64 = (-2.0 * math.Pi * float64(k)) / float64(N)
引用spec:
当不同的数字类型混合在一起时,需要转换 表达或分配。例如,int32和int不一样 虽然它们可能在特定的大小上具有相同的大小 架构。
Go使用静态类型,不会自动在数字类型之间进行转换。原因可能是避免一些错误。例如,float64(2.5) * int(2)
应该产生什么价值和什么类型?结果应该是int(5)
吗? int(4)
? float64(5.0)
?在Go中,这不是问题。 Go常见问题解答中有more to say。
@jnml指出,在这种情况下,以下就足够了:
var c float64 = -2 * math.Pi / float64(N)