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
}