aboutsummaryrefslogtreecommitdiffstats
path: root/common/size.go
diff options
context:
space:
mode:
authorTaylor Gerring <taylor.gerring@gmail.com>2015-03-22 20:35:13 +0800
committerTaylor Gerring <taylor.gerring@gmail.com>2015-03-22 20:35:13 +0800
commit82a41a198e3ac217e1c349c7300b1fb28e4982ab (patch)
tree4233d11352539c26e4aa9f2c0a869673615be291 /common/size.go
parent08b21acff1ca397e775e926e0f9a96deaa9820fd (diff)
downloadgo-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.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)
+}