# 计算正常
```go
var a float64 = 12959653081233152683760791820268915873095215894259158297207384037775798390732947435759407568730776231939495920976951779674164698735094020653357745276190720
var b float64 = 38702708391292475707970394122420465445262695173878312073868790125970680813462212621273021068406482338979482750490461442604850467520473202688
// 正确结果:12959653081233191386469183112744623843489338314724603559902557916087872259523073406440221030943397504960564327459290759156915189196536625503825265749393408
fmt.Println(strconv.FormatFloat(a+b, 'f', 0, 64))
```
# 计算出问题
```go
var a float64 = 12959653081233191386469183112744623843489338314724603559902557916087872259523073406440221030943397504960564327459290759156915189196536625503825265749393408
var b float64 = 1302494993937727547864388263735304125561725318351673964024430436931705604299209078600534362879064309484886438718428990856894006118477463552
// 正确结果:12959653081233192688964177050472171707877602050028729121627876267761836283953510338145825330152476105494927206523600244043353907625527482397831384226856960
// 输出结果:12959653081233192875034890470147535688504496869357889916160064603715259716015001328389483087182344476999836189247073027598559438829669033382689401152208896
fmt.Println(strconv.FormatFloat(a+b, 'f', 0, 64))
```
# 那么问题来了
> 不看多的,就看个位,计算就有问题了。
> 是不是不应该这样计算?
> 在PHP中有bcadd,go里面有没有类似的函数呢?
> 望高人指教!
更多评论
楼主 对浮点运算的基本概念是不对的。 浮点数因为有 存储长度限制,末尾一定是是有误差的, 浮点数的计算结果要从 最高位 往 最低位 看!不能从 最低位 往最低位看!
楼主需要的是 大数 精确计算, 试下 golang 的 bignum 包吧。
#1