2015-07-12 53 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