GO lang - 常量截断为整数

时间:2013-04-22 15:45:28

标签: floating-point go syntax-error

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

1 个答案:

答案 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)