# golang浮点数精度问题

``````package main

import (
"fmt"
"strconv"
)

func main() {
var ff, e float64
e = 100.00
ff = -0.210615789

ff = FloatRound(ff, 4)
fmt.Println(ff)  // 输出 -0.2106
qq := ff * e
fmt.Println(qq)  // 输出 -21.060000000000002
}

// 截取小数位数
func FloatRound(f float64, n int) float64 {
format := "%." + strconv.Itoa(n) + "f"
res, _ := strconv.ParseFloat(fmt.Sprintf(format, f), 64)
return res
}
``````

``````package main

import (
"fmt"
"strconv"
)

func main() {
var ff, e float64
e = 100.00
ff = -0.210615789

// 先计算
qq := ff * e
fmt.Println(qq)  // 输出 -21.0615789
// 再截取
qq = FloatRound(qq, 4)
fmt.Println(qq)  // 输出 -21.0616

}

// 截取小数位数
func FloatRound(f float64, n int) float64 {
format := "%." + strconv.Itoa(n) + "f"
res, _ := strconv.ParseFloat(fmt.Sprintf(format, f), 64)
return res
}
``````

1 回复  |  直到 2019-10-22 15:09:45

• 请尽量让自己的回复能够对别人有帮助
• 支持 Markdown 格式, **粗体**、~~删除线~~、``单行代码``
• 支持 @ 本站用户；支持表情（输入 : 提示），见 Emoji cheat sheet
• 图片支持拖拽、截图粘贴等方式上传

``````package main

import (
"fmt"
"strconv"
)

func main() {
var ff, e float64
e = 100.00
ff = -0.210615789

ff = FloatRound(ff, 4)
fmt.Println(ff)  // 输出 -0.2106
qq := ff * e
fmt.Println(qq)  // 输出 -21.060000000000002
}

// 截取小数位数
func FloatRound(f float64, n int) float64 {
format := "%." + strconv.Itoa(n) + "f"
res, _ := strconv.ParseFloat(fmt.Sprintf(format, f), 64)
return res
}
``````

``````package main

import (
"fmt"
"strconv"
)

func main() {
var ff, e float64
e = 100.00
ff = -0.210615789

// 先计算
qq := ff * e
fmt.Println(qq)  // 输出 -21.0615789
// 再截取
qq = FloatRound(qq, 4)
fmt.Println(qq)  // 输出 -21.0616

}

// 截取小数位数
func FloatRound(f float64, n int) float64 {
format := "%." + strconv.Itoa(n) + "f"
res, _ := strconv.ParseFloat(fmt.Sprintf(format, f), 64)
return res
}
``````