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 {