diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-03-23 04:46:46 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-03-23 04:46:46 +0800 |
commit | 8affdf96e23f092b7fe24d168b024b10eab35e05 (patch) | |
tree | 3d29fe62226a54a8f22d194df03224c7625e1312 /common/size.go | |
parent | 3133372a6a81c91528afbde58e22b3f9df257d03 (diff) | |
parent | bf73f02fe040086ac7c9786a15fadc65840a8536 (diff) | |
download | go-tangerine-8affdf96e23f092b7fe24d168b024b10eab35e05.tar go-tangerine-8affdf96e23f092b7fe24d168b024b10eab35e05.tar.gz go-tangerine-8affdf96e23f092b7fe24d168b024b10eab35e05.tar.bz2 go-tangerine-8affdf96e23f092b7fe24d168b024b10eab35e05.tar.lz go-tangerine-8affdf96e23f092b7fe24d168b024b10eab35e05.tar.xz go-tangerine-8affdf96e23f092b7fe24d168b024b10eab35e05.tar.zst go-tangerine-8affdf96e23f092b7fe24d168b024b10eab35e05.zip |
Merge pull request #547 from tgerring/commoncleanup
common/common.go cleanup
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) +} |