Golang Decimal精确计算库
在Golang项目中使用Decimal库进行精确计算时,遇到浮点数精度丢失的问题。例如,执行0.1+0.2运算时,结果不是预期的0.3。请问有哪些可靠的Golang Decimal库推荐?这些库的性能如何?在实际项目中处理财务计算时需要注意哪些细节?
2 回复
推荐使用shopspring/decimal库,支持高精度十进制计算,避免浮点数精度问题。适用于金融、货币等场景,简单易用,性能良好。
更多关于Golang Decimal精确计算库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中,处理精确小数计算时,推荐使用 shopspring/decimal 库,它提供高精度的十进制运算,适用于金融、货币等场景。以下是安装、基础用法和示例:
安装
go get github.com/shopspring/decimal
核心功能
- 精确表示小数:避免浮点数精度问题。
- 基本运算:加、减、乘、除、四舍五入等。
- 链式操作:支持方法链调用。
代码示例
package main
import (
"fmt"
"github.com/shopspring/decimal"
)
func main() {
// 初始化
a := decimal.NewFromFloat(0.1)
b := decimal.NewFromFloat(0.2)
// 加法
sum := a.Add(b)
fmt.Println("0.1 + 0.2 =", sum) // 输出: 0.3
// 乘法
product := a.Mul(decimal.NewFromInt(3))
fmt.Println("0.1 * 3 =", product) // 输出: 0.3
// 除法(保留两位小数)
result := decimal.NewFromInt(10).Div(decimal.NewFromInt(3))
rounded := result.Round(2)
fmt.Println("10 / 3 ≈", rounded) // 输出: 3.33
// 比较
if a.LessThan(b) {
fmt.Println("a < b")
}
}
常用方法
Add(y),Sub(y),Mul(y),Div(y):四则运算。Round(places):四舍五入到指定小数位。Cmp(y):比较(返回 -1/0/1)。String():转换为字符串。
注意事项
- 避免直接使用
float64初始化,优先用NewFromString或NewFromInt确保精度。 - 适用于货币计算、税率等对精度要求高的场景。
通过该库可有效避免浮点数误差,确保计算结果精确可靠。

