SI: handle negative numbers
diff --git a/si.go b/si.go
index fe86fe5..699530e 100644
--- a/si.go
+++ b/si.go
@@ -41,7 +41,7 @@
var riParseRegex *regexp.Regexp
func init() {
- ri := `^([0-9.]+)\s?([`
+ ri := `^([\-0-9.]+)\s?([`
for _, v := range siPrefixTable {
ri += v
}
@@ -61,6 +61,10 @@
if input == 0 {
return 0, ""
}
+ isNegative := input < 0
+ if isNegative {
+ input *= -1
+ }
exponent := math.Floor(logn(input, 10))
exponent = math.Floor(exponent/3) * 3
@@ -73,6 +77,10 @@
value = input / math.Pow(10, exponent)
}
+ if isNegative {
+ value *= -1
+ }
+
prefix := siPrefixTable[exponent]
return value, prefix
}
diff --git a/si_test.go b/si_test.go
index 4940378..bc5bac6 100644
--- a/si_test.go
+++ b/si_test.go
@@ -58,6 +58,9 @@
// special case
{"1F", 1000 * 1000, "1 MF"},
{"1F", 1e6, "1 MF"},
+
+ // negative number
+ {"-100 F", -100, "-100 F"},
}
for _, test := range tests {