如何在Go中测试浮点数是否为整数?

Joh*_*der 19 go modulus

我最初尝试过这个,但是没有为float64定义%运算符.

func main(){
    var a float64
    a = 1.23
    if a%1 == 0{
        fmt.Println("yay")
    }else{
        fmt.Println("you fail")
    }
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 23

假设您的数字适合a int64,您可以将浮点值与转换后的整数值进行比较,看看它们是否相同:

if a == float64(int64(a)) {
    fmt.Println("yay")
} else {
    fmt.Println("you fail")
}
Run Code Online (Sandbox Code Playgroud)

否则你可以使用这里math.Trunc详述的功能,例如:

if a == math.Trunc(a) {
    fmt.Println("yay")
} else {
    fmt.Println("you fail")
}
Run Code Online (Sandbox Code Playgroud)

那个应该在整个float64域内工作.


Tim*_*air 5

您可以使用该math.Modf功能:

const epsilon = 1e-9 // Margin of error
if _, frac := math.Modf(math.Abs(a)); frac < epsilon || frac > 1.0 - epsilon {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

epsilon这里是必要的,因为浮点数学不精确(例如float64(.3)+float64(.6)+float64(.1) != 1

来自戈多克:

func Modf(f float64) (int float64, frac float64)
Run Code Online (Sandbox Code Playgroud)

Modf 返回总和为 f 的整数和小数浮点数。两个值与 f 具有相同的符号。