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 初始化,优先用 NewFromStringNewFromInt 确保精度。
  • 适用于货币计算、税率等对精度要求高的场景。

通过该库可有效避免浮点数误差,确保计算结果精确可靠。

回到顶部