Arbitrary-precision fixed-point decimal numbers in go
Find a file
Vadim Graboys 3bac4bd166 init
2015-02-10 15:33:58 -05:00
decimal.go init 2015-02-10 15:33:58 -05:00
decimal_test.go init 2015-02-10 15:33:58 -05:00
LICENSE init 2015-02-10 15:33:58 -05:00
README.md init 2015-02-10 15:33:58 -05:00

decimal

Arbitrary-precision fixed-point decimal numbers in go.

NOTE: can "only" represent numbers with a maximum of 2^31 digits after the decmial point.

Usage

package main

import (
    "fmt"
    "github.com/jellolabs/decimal"
)

func main() {
	price, err := decimal.NewFromString("136.02")
    if err != nil {
        panic(err)
    }

	quantity := decimal.NewFromFloat(3)

	fee, _ := decimal.NewFromString(".035")
	taxRate, _ := decimal.NewFromString(".08875")

    subtotal := price.Mul(quantity)

    preTax := subtotal.Mul(fee.Add(decimal.NewFromFloat(1)))

    total := preTax.Mul(taxRate.Add(decimal.NewFromFloat(1)))

	fmt.Println("Subtotal:", subtotal)
	fmt.Println("Pre-tax:", preTax)
    fmt.Println("Taxes:", total.Sub(preTax))
	fmt.Println("Total:", total)
	fmt.Println("Tax rate:", total.Sub(preTax).Div(preTax))
}

Documentation

http://godoc.org/github.com/jellolabs/decimal

License

The MIT License (MIT)