golang decimal处理插件包 大数字处理

Install
Run go get github.com/shopspring/decimal

package main
 
import (
	"fmt"
 
	"github.com/shopspring/decimal"
)
 
func main() {
	price, _ := decimal.NewFromString("136.02")
	quantity := decimal.NewFromFloat(3)
	fee, _ := decimal.NewFromString(".035")
	taxRate, _ := decimal.NewFromString(".08875")
 
	subtotal := mul(price, quantity)
	preTax := mul(subtotal, add(fee, decimal.NewFromFloat(1)))
	total := mul(preTax, add(taxRate, decimal.NewFromFloat(1)))
	taxes := sub(total, preTax)
	taxRate = div(sub(total, preTax), preTax)
 
	fmt.Println("int,Subtotal:",int(subtotal))
	fmt.Println("float64,Subtotal:",float(subtotal))
 
	fmt.Println("Subtotal:", subtotal) // Subtotal: 408.06
	fmt.Println("Pre-tax:", preTax)    // Pre-tax: 422.3421
	fmt.Println("Taxes:", taxes)       // Taxes: 37.482861375
	fmt.Println("Total:", total)       // Total: 459.824961375
	fmt.Println("Tax rate:", taxRate)  // Tax rate: 0.08875
}
 
// 加法
func add(d1 decimal.Decimal, d2 decimal.Decimal) decimal.Decimal {
	return d1.Add(d2)
}
 
// 减法
func sub(d1 decimal.Decimal, d2 decimal.Decimal) decimal.Decimal {
	return d1.Sub(d2)
}
 
// 乘法
func mul(d1 decimal.Decimal, d2 decimal.Decimal) decimal.Decimal {
	return d1.Mul(d2)
}
 
// 除法
func div(d1 decimal.Decimal, d2 decimal.Decimal) decimal.Decimal {
	return d1.Div(d2)
}
 
// int
func int(d decimal.Decimal) int64{
	return d.IntPart()
}
 
// float
func float(d decimal.Decimal) float64{
	f, exact := d.Float64()
	if !exact{
		return f
	}
	return 0
}
[]