diff options
author | Taylor Gerring <taylor.gerring@gmail.com> | 2015-03-22 20:35:13 +0800 |
---|---|---|
committer | Taylor Gerring <taylor.gerring@gmail.com> | 2015-03-22 20:35:13 +0800 |
commit | 82a41a198e3ac217e1c349c7300b1fb28e4982ab (patch) | |
tree | 4233d11352539c26e4aa9f2c0a869673615be291 /common/size.go | |
parent | 08b21acff1ca397e775e926e0f9a96deaa9820fd (diff) | |
download | go-tangerine-82a41a198e3ac217e1c349c7300b1fb28e4982ab.tar.gz go-tangerine-82a41a198e3ac217e1c349c7300b1fb28e4982ab.tar.zst go-tangerine-82a41a198e3ac217e1c349c7300b1fb28e4982ab.zip |
Move CurrencyToString to size
Diffstat (limited to 'common/size.go')
-rw-r--r-- | common/size.go | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/common/size.go b/common/size.go index 80a17279b..b5c0b0b3f 100644 --- a/common/size.go +++ b/common/size.go @@ -1,6 +1,9 @@ package common -import "fmt" +import ( + "fmt" + "math/big" +) type StorageSize float64 @@ -13,3 +16,60 @@ func (self StorageSize) String() string { return fmt.Sprintf("%.2f B", self) } } + +// The different number of units +var ( + Douglas = BigPow(10, 42) + Einstein = BigPow(10, 21) + Ether = BigPow(10, 18) + Finney = BigPow(10, 15) + Szabo = BigPow(10, 12) + Shannon = BigPow(10, 9) + Babbage = BigPow(10, 6) + Ada = BigPow(10, 3) + Wei = big.NewInt(1) +) + +// +// Currency to string +// Returns a string representing a human readable format +func CurrencyToString(num *big.Int) string { + var ( + fin *big.Int = num + denom string = "Wei" + ) + + switch { + case num.Cmp(Douglas) >= 0: + fin = new(big.Int).Div(num, Douglas) + denom = "Douglas" + case num.Cmp(Einstein) >= 0: + fin = new(big.Int).Div(num, Einstein) + denom = "Einstein" + case num.Cmp(Ether) >= 0: + fin = new(big.Int).Div(num, Ether) + denom = "Ether" + case num.Cmp(Finney) >= 0: + fin = new(big.Int).Div(num, Finney) + denom = "Finney" + case num.Cmp(Szabo) >= 0: + fin = new(big.Int).Div(num, Szabo) + denom = "Szabo" + case num.Cmp(Shannon) >= 0: + fin = new(big.Int).Div(num, Shannon) + denom = "Shannon" + case num.Cmp(Babbage) >= 0: + fin = new(big.Int).Div(num, Babbage) + denom = "Babbage" + case num.Cmp(Ada) >= 0: + fin = new(big.Int).Div(num, Ada) + denom = "Ada" + } + + // TODO add comment clarifying expected behavior + if len(fin.String()) > 5 { + return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom) + } + + return fmt.Sprintf("%v %s", fin, denom) +} |