func()

in dax/internal/cbor/decimal.go [38:79]


func (d *Decimal) SetString(s string) (*Decimal, bool) {
	if len(s) == 0 {
		return nil, false
	}

	var exp int64
	var err error
	if sep := strings.IndexAny(s, "Ee"); sep >= 0 {
		exp, err = strconv.ParseInt(s[sep+1:], 10, 32)
		if err != nil {
			return nil, false
		}
		s = s[:sep]
	}

	var v big.Int
	dot := strings.LastIndexByte(s, '.')
	if dot < 0 {
		_, ok := v.SetString(s, 10)
		if !ok {
			return nil, false
		}
		d.value.Set(&v)
		d.scale = int(-exp)
		return d, true
	}

	if signCh := strings.IndexAny(s, "+-"); signCh > 0 {
		// Optional sign must be the first char.
		return nil, false
	}
	exp -= int64(len(s) - dot - 1)

	_, ok := v.SetString(s[:dot]+s[dot+1:], 10)
	if !ok {
		return nil, false
	}

	d.value.Set(&v)
	d.scale = int(-exp)
	return d, true
}