github.com/hirochachacha/plua@v0.0.0-20170217012138-c82f520cc725/object/strconv.go (about) 1 package object 2 3 import ( 4 "strings" 5 6 "github.com/hirochachacha/plua/internal/strconv" 7 ) 8 9 func integerToString(i Integer) String { 10 return String(strconv.FormatInt(int64(i), 10)) 11 } 12 13 func numberToInteger(n Number) (Integer, bool) { 14 ival := Integer(n) 15 if n == Number(ival) { 16 return ival, true 17 } 18 return ival, false 19 } 20 21 func numberToString(n Number) String { 22 return String(strconv.FormatFloat(float64(n), 'f', -1, 64)) 23 } 24 25 func numberToGoUint(n Number) (uint64, bool) { 26 u := uint64(n) 27 if n == Number(u) { 28 return u, true 29 } 30 return u, false 31 } 32 33 func trimDotZero(s string) string { 34 if i := strings.IndexByte(string(s), '.'); i > 0 { 35 for j := i + 1; j < len(s); j++ { 36 if s[j] != '0' { 37 return s 38 } 39 } 40 return s[:i] 41 } 42 return s 43 } 44 45 func stringToInteger(s String) (Integer, bool) { 46 i, err := strconv.ParseInt(trimDotZero(strings.TrimSpace(string(s)))) 47 if err != nil { 48 return 0, false 49 } 50 return Integer(i), true 51 } 52 53 func stringToNumber(s String) (Number, bool) { 54 f, err := strconv.ParseFloat(strings.TrimSpace(string(s))) 55 if err != nil { 56 if err == strconv.ErrRange { 57 return Number(f), true 58 } 59 return 0, false 60 } 61 return Number(f), true 62 } 63 64 func stringToGoUint(s String) (uint64, bool) { 65 u, err := strconv.ParseUint(trimDotZero(strings.TrimSpace(string(s)))) 66 if err != nil { 67 return 0, false 68 } 69 return u, true 70 }