以下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?
int
float64
更换
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对此还有更多话要说。
float64(2.5) * int(2)
int(5)
int(4)
float64(5.0)
@jnml指出,在这种情况下,以下足够了:
var c float64 = -2 * math.Pi / float64(N)