aboutsummaryrefslogtreecommitdiffstats
path: root/common/size.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-03-23 04:46:46 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-03-23 04:46:46 +0800
commit8affdf96e23f092b7fe24d168b024b10eab35e05 (patch)
tree3d29fe62226a54a8f22d194df03224c7625e1312 /common/size.go
parent3133372a6a81c91528afbde58e22b3f9df257d03 (diff)
parentbf73f02fe040086ac7c9786a15fadc65840a8536 (diff)
downloadgo-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.go62
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)
+}