11

以下 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

4

1 回答 1

15

代替

var c float64 = (-2.0 * math.Pi * k) / N

经过

var c float64 = (-2.0 * math.Pi * float64(k)) / float64(N)

引用规范

当表达式或赋值中混合了不同的数值类型时,需要进行转换。例如,int32 和 int 不是同一类型,即使它们在特定架构上可能具有相同的大小。

Go 使用静态类型并且不会在数字类型之间自动转换。原因可能是为了避免一些错误。例如,应该float64(2.5) * int(2)产生什么值和什么类型?结果应该是int(5)int(4)? float64(5.0)? 在 Go 中,这不是问题。Go 常见问题解答对此有更多要说的。


@jnml 指出,在这种情况下,以下内容就足够了:

var c float64 = -2 * math.Pi / float64(N)
于 2013-04-22T15:54:37.037 回答