All Projects → bnkamalesh → currency

bnkamalesh / currency

Licence: MIT license
A currency computations package.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to currency

GoCurrency
Simple currency converter. Insert an amount, what currency to convert from and what currency to convert to.
Stars: ✭ 29 (-44.23%)
Mutual labels:  currency, currency-api
akshare
AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库
Stars: ✭ 5,155 (+9813.46%)
Mutual labels:  finance, currency
php-currency-api
Standardized wrapper for popular currency rate APIs. Currently supports FixerIO, CurrencyLayer, Open Exchange Rates and Exchange Rates API.
Stars: ✭ 17 (-67.31%)
Mutual labels:  currency, currency-api
telegram
📚 Golang bindings for Telegram API
Stars: ✭ 15 (-71.15%)
Mutual labels:  go-library, go-package
Financepy
A Python Finance Library that focuses on the pricing and risk-management of Financial Derivatives, including fixed-income, equity, FX and credit derivatives.
Stars: ✭ 416 (+700%)
Mutual labels:  finance, currency
currency-api
Free Currency Exchange Rates API with 150+ Currencies & No Rate Limits
Stars: ✭ 507 (+875%)
Mutual labels:  currency, currency-api
stockholm
💵 Modern Python library for working with money and monetary amounts. Human friendly and flexible approach for development. 100% test coverage + built-in support for GraphQL and Protocol Buffers transports using current best-practices.
Stars: ✭ 26 (-50%)
Mutual labels:  finance, currency
tellerbot
Telegram Bot for over-the-counter trading
Stars: ✭ 17 (-67.31%)
Mutual labels:  finance, currency
Akshare
AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库
Stars: ✭ 4,334 (+8234.62%)
Mutual labels:  finance, currency
FinanceKit
FinanceKit is a Framework for iOS and Mac to build apps working with financial data, like money, currencies, stocks, portfolio, transactions and other concepts.
Stars: ✭ 15 (-71.15%)
Mutual labels:  finance, currency
bankster
Money Creation Made Easy
Stars: ✭ 30 (-42.31%)
Mutual labels:  finance, currency
googletrans
G文⚡️: Concurrency-safe, Free and Unlimited google translate api for Golang. 🔥免费、无限、并发安全的谷歌翻译包
Stars: ✭ 94 (+80.77%)
Mutual labels:  go-library, go-package
salaryconverter
Equivalent salary converter using PPP
Stars: ✭ 42 (-19.23%)
Mutual labels:  finance, currency
ScoreCardModel
Score card model for Credit Scoring System.
Stars: ✭ 105 (+101.92%)
Mutual labels:  finance
Credits
Credits(CRDS) - An Evolving Currency For An Evolving Society
Stars: ✭ 14 (-73.08%)
Mutual labels:  currency
Fynance
Python and Cython scripts of machine learning, econometrics and statistical tools designed for finance.
Stars: ✭ 20 (-61.54%)
Mutual labels:  finance
octotui
🐙🐱🖥️ GitHub stats in your terminal
Stars: ✭ 202 (+288.46%)
Mutual labels:  go-package
wallet
DeFiChain Wallet. The DeFi Blockchain Light Wallet for iOS, Android & Web. + Desktop Coming Soon
Stars: ✭ 112 (+115.38%)
Mutual labels:  finance
BankClassify
Simple example of using a Naive Bayesian classification to classify entries in bank statements
Stars: ✭ 111 (+113.46%)
Mutual labels:  finance
wolf
🐺 Binance trading bot for node.js
Stars: ✭ 76 (+46.15%)
Mutual labels:  finance

webgo gopher

build coverage report maintainability godoc awesome-go

Currency v2.0.0

Currency package helps you do currency computations accurately. Currency struct holds all the data required to define a currency.

type Currency struct {
	// Code represents the international currency code
	Code string
	// Symbol is the respective currency symbol
	Symbol string
	// Main represents the main value of the currency
	Main int
	// Fractional represents the fractional/sub unit of the currency
	Fractional uint
	// FUName is the name of the fractional/sub unit of the currency. e.g. paise
	FUName string
	// FUShare represents the no.of fractional/sub units that make up 1 main unit. e.g. ₹1 = 100 paise
	// Number of fractional units that make up 1 unit of the main value
	FUShare uint
	// PrefixSymbol if true will prefix the symbol when stringified
	PrefixSymbol bool
	// SuffixSymbol if true will suffix the symbol when stringified
	SuffixSymbol bool
}

New(main int, fractional int, code, symbol string, funame string, fushare uint)

New returns a pointer of currency instance created based on the values provided

main - Main/Super unit of the currency
fractional - Subunit/fractional unit of the currency
code - is the currency code according to [ISO 4217 specification](https://en.wikipedia.org/wiki/ISO_4217)
symbol - Unicode symbol of the currency
funame - Name of the fractional/sub unit
fushare - Number of fractional/sub units that make up 1 unit of the main/super unit

IMPORTANT! Fractional unit can be negative only when the main value is 0. If the main value is not 0, fractional unit's negative sign is ignored.

Parsers & convenience methods

  1. NewFractional(fractional int, symbol string, fulabel string, fushare uint) returns a currency struct instance, given a currency's total value represented by the fractional unit
  2. ParseString(value string, code, symbol string, fulabel string, fushare uint) returns a currency struct instance, given a currency value represented as string
  3. ParseFloat64(value float64, code, symbol string, funame string, fushare uint) returns a currency struct instance, given a currency value represented in float64

Computational methods

IMPORTANT: Computation is supported only between same type of currencies (i.e. currency codes should be same)

  1. c1.Add(c2 currency) add c2 to c1, and update c1
  2. c1.AddInt(main int, fractional int) add the currency equivalent of the main & fractional int to c1
  3. c1.Subtract(c2 currency) subtract c2 from c1, and update c1
  4. c1.SubtractIn(main int, fractional int) subtract the currency equivalent of the main & fractional int from c1
  5. c1.Multiply(n int) multiply c1 by n, where n is an integer
  6. c1.MultiplyFloat64(n float64) multiply c1 by n, where n is a float64 value
  7. c1.UpdateWithFractional(ftotal int) would update the the value of c1, where ftotal is the total value of the currency in fractional unit. e.g. INR, UpdateWithFractional(100) would set the main value as 1 and fractional unit as 0
  8. c1.FractionalTotal() int returns the total value of the currency in its fractional unit. e.g. INR, if the Main value is 1 and fractional unit is 0, it would return 100, i.e. 100 paise
  9. c1.Percent(n float64) currency returns a new currency instance which is n percentage of c1
  10. c1.Divide(n int, retain bool)[]currency, ok returns a slice of currency of size n. ok if returned as true means the currency value was perfectly divisible by n. If retain is true, then c1 will have the remainder value after dividing otherwise it is distributed among the returned currencies.

Why does Divide(n int, retain bool) return a slice of currencies?

Divide unlike other operations, cannot be rounded off. If it is rounded, it would result in currency peddling.

e.g. ₹1/- (INR 1) is to be divided by 3. There are 2 options of dividing this by 3.

1. Set 33 paise per split, and retain the remaining 1 paise at source. (`Divide(n, true)`)

2. Set 1 of the split with an extra value, i.e. 34 + 33 + 33. (`Divide(n, false)`)

Multiple currency representations

  1. c1.String(), returns a string representation of the currency value
  2. c1.Float64(), returns a float64 representation of the currency value

Benchmarks

How to run?

$ go test -bench=.

Results when run on a MacBook Pro (13-inch, Early 2015), CPU: 2.7 GHz Intel Core i5, RAM: 8 GB 1867 MHz DDR3, Graphics: Intel Iris Graphics 6100 1536 MB

BenchmarkNew-4                    	20000000	        67.3 ns/op
BenchmarkNewFractional-4          	20000000	        65.9 ns/op
BenchmarkParseFloat64-4           	20000000	        87.4 ns/op
BenchmarkParseString-4            	 3000000	       544 ns/op
BenchmarkString-4                 	10000000	       211 ns/op
BenchmarkStringNoPrefix-4         	10000000	       164 ns/op
BenchmarkFloat64-4                	2000000000	         0.34 ns/op
BenchmarkFractionalTotal-4        	2000000000	         0.33 ns/op
BenchmarkUpdateWithFractional-4   	100000000	        10.3 ns/op
BenchmarkAdd-4                    	100000000	        20.8 ns/op
BenchmarkAddInt-4                 	100000000	        18.9 ns/op
BenchmarkSubtract-4               	100000000	        21.2 ns/op
BenchmarkSubtractInt-4            	100000000	        18.3 ns/op
BenchmarkMultiply-4               	100000000	        16.2 ns/op
BenchmarkMultiplyFloat64-4        	50000000	        30.1 ns/op
BenchmarkPercent-4                	20000000	        67.1 ns/op
BenchmarkDivide-4                 	10000000	       155 ns/op

References

  1. Ref - Sub unit or fractional unit
  2. Ref - Currencies - about currencies
  3. Non-decimal sub unit in currencies are only used by 2 countries today. These are getting phased out.

IMPORTANT! This package does not support sub units which are not a power of 10. Nor does it support currencies with more than 1 sub unit

The gopher

The gopher used here was created using Gopherize.me. Deal with currency professionally just like this gopher!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].