使用golang分离整数和小数部分

Raj*_*mar 6 go

我是 Golang 新手。我想将浮点数分为整数部分和小数部分。经过一番研究后,我实现了它,但我的代码存在问题。我使用 5.8 作为输入,但结果是 5 和 0.79999。

package main

import(
        "fmt"
        "math"
)    

func Round2(val float64) {
        intpart, div := math.Modf(val)
        fmt.Println(div)

        fmt.Println(intpart)

}

func main() {
        fmt.Println("Hello, playground")
        Round2(5.8)
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个,我得到的输出是:

0.7999999999999998
5
Run Code Online (Sandbox Code Playgroud)

如果有任何其他方法可以做到这一点,请告诉我。我已经插入了包含我的代码的 go Playground。

https://play.golang.org/p/O4n0k0XyMX

And*_*eig 4

这是浮点运算的产物。浮点值并不总是与您期望的值完全一致,因为并非所有数字都可以准确地以您所使用的任何处理器所使用的浮点格式表示。显然,该值非常接近 0.8,等于 15 位有效数字。请注意,这并不是 Go 特有的。

代替

fmt.Println(div)
Run Code Online (Sandbox Code Playgroud)

尝试

fmt.Printf(".4f\n", div) // shows only 4 decimal places
Run Code Online (Sandbox Code Playgroud)

看起来这篇文章有一些很好的信息:https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems