go - 使用golang分隔整数和小数部分

标签 go

我是 Golang 的新手。我想将 float 分成整数和小数部分。经过一些研究,我实现了它,但我的代码中存在问题。我使用 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)
}

我已经试过了,我得到的输出是:

0.7999999999999998
5

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

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

最佳答案

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

代替

fmt.Println(div)

尝试

fmt.Printf(".4f\n", div) // shows only 4 decimal places

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

关于go - 使用golang分隔整数和小数部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143750/

相关文章:

go - Go 代码不编译 : undefined: revel. EmptyPlugin

Golang 类型系统不一致(http包)

go - 计算Golang中的最近点

go - 理解 golang 中的词法作用域

go - 如何遍历 Go 模板中的列表

go - 采用 map 且只关心键类型的函数

go - Golang 中的记录器功能失败

go - 为什么不能转换 Slice 类型?

golang 从控制台删除符号

json - 在 Go 中的 json.Marshal 期间锁定对象