float精度问题

最近做的一个项目是京东购物的(中间商)。需要用到float64进行价格运算,结果出现了**.9999999。怎么办?

解决方案一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import (
"fmt"
"strconv"
)

func main() {
fmt.Println(F())
fmt.Println(Float2Float(F()))
}

func F() float64 {
f := 10.2
return f * 1e2
}

func Float2Float(num float64) float64 {
float_num, _ := strconv.ParseFloat(fmt.Sprintf("%.8f", num), 64)
return float_num
}