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  }