doumor942473 2017-09-22 23:05

# 在Go运算中处理浮点数精度？

I'm interested in a way to accurately subtract 2 float's in Go.

I've tried to use the `math/big` library but I can't get an accurate result.

I've used the big.js library in Javascript which solves this problem. Is there a similar library/method for Go arithmetic?

``````    package main

import (
"fmt"
"math/big"
)

func main() {
const prec = 200
a := new(big.Float).SetPrec(prec).SetFloat64(5000.0)
b := new(big.Float).SetPrec(prec).SetFloat64(4000.30)
result := new(big.Float).Sub(a, b)
fmt.Println(result)
}
Result: 999.6999999999998181010596454143524169921875
``````

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

• 写回答

#### 2条回答默认 最新

• doushoubu5360 2017-09-22 23:08
关注

Package big

import "math/big"

func (*Float) String

``````func (x *Float) String() string
``````

String formats x like x.Text('g', 10). (String must be called explicitly, Float.Format does not support %s verb.)

Use string input and round the output, for example,

``````package main

import (
"fmt"
"math/big"
)

func main() {
const prec = 200
a, _ := new(big.Float).SetPrec(prec).SetString("5000")
b, _ := new(big.Float).SetPrec(prec).SetString("4000.30")
result := new(big.Float).Sub(a, b)
fmt.Println(result)
fmt.Println(result.String())
}
``````

Output:

``````999.6999999999999999999999999999999999999999999999999999999995
999.7
``````

For decimal, by definition, binary floating-point numbers are an approximation. For example, the decimal number `0.1` cannot be represented exactly, it is approximately `1.10011001100110011001101 * (2**(-4))`.

You are already used to this sort of thing since you know about repeating decimals, an approximation for rational numbers: `1 / 3 = .333...` and `3227 / 555 = 5.8144144144...`.

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 悬赏问题

• ¥15 关于#python#的问题：我知道这个问题对你们来说肯定so easy
• ¥15 wpf datagrid如何实现多层表头
• ¥15 为啥画版图在Run DRC会出现Connect Error？可我Calibre的hostname和计算机的hostname已经设置成一样的了。
• ¥20 网站后台使用极速模式非常的卡
• ¥20 Keil uVision5创建project没反应
• ¥15 mmseqs内存报错
• ¥15 vika文档如何与obsidian同步
• ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗？
• ¥15 陆空双模式无人机飞控设置
• ¥15 sentaurus lithography