2015-07-12 47 views
-1

考慮寫在去下面的代碼:Float64類型中去不斷,損失精度

package main 

import "fmt" 

func main() { 
    const pi float64 = 22/7 
    fmt.Println("pi value", pi) 
} 

這裏的pi3。問題是爲什麼即使它是float64類型,該值也會失去精度?

回答

3

NeverMind,我得到了答案。

package main 

import "fmt" 

func main() { 
    const pi float64 = 22.0/7.0 
    fmt.Println("pi value", pi) 
} 

輸出3.142857142857143。看起來類型取決於類型整數是否被分割,它將返回一個整數,而不管接收方var是否爲float64類型。所以得到一個浮點值,在浮點值之間發生浮動。

+2

不完全是你在做什麼,但相關的,對於一些流行的常量,你也可以使用'數學'包常數值。所以對於pi說,你可以使用'math.Pi',而不必計算它的值。 http://golang.org/pkg/math/ – Varun

+0

感謝您的見解,非常感謝! – CuriousMind

+1

@CuriousMind此轉換的原因是,對於常量值應用自動類型轉換(這隻適用於常量值)。完成「22/7」的整數除法並將結果轉換爲「float64」。 – nemo