mirror of https://github.com/jackc/pgx.git
pull out changes into new public function
parent
12582a0fd4
commit
20bf953a17
|
@ -119,6 +119,26 @@ func (n Numeric) Int64Value() (Int8, error) {
|
||||||
return Int8{Int64: bi.Int64(), Valid: true}, nil
|
return Int8{Int64: bi.Int64(), Valid: true}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n *Numeric) ScanScientific(src string) error {
|
||||||
|
if !strings.ContainsAny("eE", src) {
|
||||||
|
return scanPlanTextAnyToNumericScanner{}.Scan([]byte(src), n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if bigF, ok := new(big.Float).SetString(string(src)); ok {
|
||||||
|
smallF, _ := bigF.Float64()
|
||||||
|
src = strconv.FormatFloat(smallF, 'f', -1, 64)
|
||||||
|
}
|
||||||
|
|
||||||
|
num, exp, err := parseNumericString(src)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*n = Numeric{Int: num, Exp: exp, Valid: true}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (n *Numeric) toBigInt() (*big.Int, error) {
|
func (n *Numeric) toBigInt() (*big.Int, error) {
|
||||||
if n.Exp == 0 {
|
if n.Exp == 0 {
|
||||||
return n.Int, nil
|
return n.Int, nil
|
||||||
|
@ -759,13 +779,6 @@ func (scanPlanTextAnyToNumericScanner) Scan(src []byte, dst any) error {
|
||||||
return scanner.ScanNumeric(Numeric{InfinityModifier: NegativeInfinity, Valid: true})
|
return scanner.ScanNumeric(Numeric{InfinityModifier: NegativeInfinity, Valid: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.ContainsAny(string(src), "eE") {
|
|
||||||
if bigF, ok := new(big.Float).SetString(string(src)); ok {
|
|
||||||
smallF, _ := bigF.Float64()
|
|
||||||
src = []byte(strconv.FormatFloat(smallF, 'f', -1, 64))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
num, exp, err := parseNumericString(string(src))
|
num, exp, err := parseNumericString(string(src))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -283,18 +283,6 @@ func TestNumericUnmarshalJSON(t *testing.T) {
|
||||||
src: []byte("1234.56789"),
|
src: []byte("1234.56789"),
|
||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "float: 1e10",
|
|
||||||
want: &pgtype.Numeric{Valid: true, Int: big.NewInt(1), Exp: 10},
|
|
||||||
src: []byte("1e10"),
|
|
||||||
wantErr: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "float: 1.000101231014e10",
|
|
||||||
want: &pgtype.Numeric{Valid: true, Int: big.NewInt(1000101231014), Exp: -2},
|
|
||||||
src: []byte("1.000101231014e10"),
|
|
||||||
wantErr: false,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "invalid value",
|
name: "invalid value",
|
||||||
want: &pgtype.Numeric{},
|
want: &pgtype.Numeric{},
|
||||||
|
|
Loading…
Reference in New Issue