一尘不染

常量被截断为整数

go

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

为什么我不能使用intin类型float64


阅读 332

收藏
2020-07-02

共1个答案

一尘不染

更换

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
FAQ对此还有更多话要说


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

var c float64 = -2 * math.Pi / float64(N)
2020-07-02