diff options
Diffstat (limited to 'vendor/github.com/tdewolff/parse/v2/strconv/decimal.go')
-rw-r--r-- | vendor/github.com/tdewolff/parse/v2/strconv/decimal.go | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/vendor/github.com/tdewolff/parse/v2/strconv/decimal.go b/vendor/github.com/tdewolff/parse/v2/strconv/decimal.go deleted file mode 100644 index 8427cb4ac..000000000 --- a/vendor/github.com/tdewolff/parse/v2/strconv/decimal.go +++ /dev/null @@ -1,72 +0,0 @@ -package strconv - -import ( - "math" -) - -// ParseDecimal parses number of the format 1.2 -func ParseDecimal(b []byte) (float64, int) { - // float64 has up to 17 significant decimal digits and an exponent in [-1022,1023] - i := 0 - //sign := 1.0 - //if 0 < len(b) && b[0] == '-' { - // sign = -1.0 - // i++ - //} - - start := -1 - dot := -1 - n := uint64(0) - for ; i < len(b); i++ { - // parse up to 18 significant digits (with dot will be 17) ignoring zeros before/after - c := b[i] - if '0' <= c && c <= '9' { - if start == -1 { - if '1' <= c && c <= '9' { - n = uint64(c - '0') - start = i - } - } else if i-start < 18 { - n *= 10 - n += uint64(c - '0') - } - } else if c == '.' { - if dot != -1 { - break - } - dot = i - } else { - break - } - } - if i == 1 && dot == 0 { - return 0.0, 0 // only dot - } else if start == -1 { - return 0.0, i // only zeros and dot - } else if dot == -1 { - dot = i - } - - exp := (dot - start) - LenUint(n) - if dot < start { - exp++ - } - if 1023 < exp { - return math.Inf(1), i - //if sign == 1.0 { - // return math.Inf(1), i - //} else { - // return math.Inf(-1), i - //} - } else if exp < -1022 { - return 0.0, i - } - - f := float64(n) // sign * float64(n) - if 0 <= exp && exp < 23 { - return f * float64pow10[exp], i - } else if 23 < exp && exp < 0 { - return f / float64pow10[exp], i - } - return f * math.Pow10(exp), i -} |