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

使用golang分隔整部分和小数部分,go,Go,我是刚来戈朗的。我想把浮点数分成整数和小数两部分。经过一些研究,我实现了它,但我的代码中有一个问题。我使用5.8作为输入,但结果是5和0.79999 package main import( "fmt" "math" ) func Round2(val float64) { intpart, div := math.Modf(val) fmt.Println(div) fmt.Println(intpa

我是刚来戈朗的。我想把浮点数分成整数和小数两部分。经过一些研究,我实现了它,但我的代码中有一个问题。我使用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游乐场,其中包含我的代码


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

而不是

fmt.Println(div)
试一试


这篇文章似乎提供了一些很好的信息:

您可能需要使用精度为固定.00的
小数64p2
类型的小数-

它能有效地存储准确的金额。

试试以下方法:

f := 5.8
ipart := int64(f)
fmt.Println(ipart)
decpart := fmt.Sprintf("%.7g", f-float64(ipart))[2:]
fmt.Println(decpart)
中的完整答案可在中找到。基本上,我使用了格式说明符
%g
来实现结果,而且,
%.6g
将小数部分四舍五入到六位,后面的零不显示


这是一个精度错误,但也取决于您如何格式化输出:使用
math.Modf()
,如本答案所述
f := 5.8
ipart := int64(f)
fmt.Println(ipart)
decpart := fmt.Sprintf("%.7g", f-float64(ipart))[2:]
fmt.Println(decpart)