diff options
| author | 2025-03-09 17:47:56 +0100 | |
|---|---|---|
| committer | 2025-12-01 22:08:04 +0100 | |
| commit | b1af8fd87760b34e3ff2fd3bda38f211815a0473 (patch) | |
| tree | 9317fad1a7ec298d7a8d2678e4e422953bbc6f33 /vendor/github.com/tdewolff/parse/v2/strconv/decimal.go | |
| parent | [chore] update URLs to forked source (diff) | |
| download | gotosocial-b1af8fd87760b34e3ff2fd3bda38f211815a0473.tar.xz | |
[chore] remove vendor
Diffstat (limited to 'vendor/github.com/tdewolff/parse/v2/strconv/decimal.go')
| -rw-r--r-- | vendor/github.com/tdewolff/parse/v2/strconv/decimal.go | 149 |
1 files changed, 0 insertions, 149 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 137c87936..000000000 --- a/vendor/github.com/tdewolff/parse/v2/strconv/decimal.go +++ /dev/null @@ -1,149 +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 { - if sign == 1.0 { - return math.Inf(1), i - } else { - return math.Inf(-1), i - } - } else if exp < -1022 { - return 0.0, i - } - - f := 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 -} - -// AppendDecimal appends a float to `b` with `dec` the maximum number of decimals. -func AppendDecimal(b []byte, f float64, dec int) []byte { - if math.IsNaN(float64(f)) || math.IsInf(float64(f), 0) { - return b - } - - if dec < 0 || 17 < dec { - dec = 17 - } - f *= math.Pow10(dec) - - // correct rounding - if 0.0 <= f { - f += 0.5 - } else { - f -= 0.5 - } - - // calculate mantissa and exponent - num := int64(f) - if num == 0 { - return append(b, '0') - } - for 0 < dec && num%10 == 0 { - num /= 10 - dec-- // remove trailing zeros - } - - i, n := len(b), LenInt(num) - if 0 < dec { - if n < dec { - n = dec // number has zero after dot - } - n++ // dot - if lim := int64pow10[dec]; 0 < num && num < lim || num < 0 && -lim < num { - n++ // zero at beginning - } - } - if cap(b) < i+n { - b = append(b, make([]byte, n)...) - } else { - b = b[:i+n] - } - - // print sign - if num < 0 { - num = -num - b[i] = '-' - } - i += n - 1 - - // print number - if 0 < dec { - b[i] = byte(num%10) + '0' - num /= 10 - dec-- - i-- - for 0 < dec { - b[i] = byte(num%10) + '0' - num /= 10 - dec-- - i-- - } - b[i] = '.' - i-- - } - if num == 0 { - b[i] = '0' - } else { - for num != 0 { - b[i] = byte(num%10) + '0' - num /= 10 - i-- - } - } - return b -} |
