2
0

Improve accuracy of numeric to float

fixes #27
This commit is contained in:
Jack Christensen
2020-05-13 08:05:19 -05:00
parent 6a1a9d05bc
commit 238967ec4e
2 changed files with 8 additions and 10 deletions
+7 -10
View File
@@ -291,19 +291,16 @@ func (dst *Numeric) toBigInt() (*big.Int, error) {
}
func (src *Numeric) toFloat64() (float64, error) {
f, err := strconv.ParseFloat(src.Int.String(), 64)
buf := make([]byte, 0, 32)
buf = append(buf, src.Int.String()...)
buf = append(buf, 'e')
buf = append(buf, strconv.FormatInt(int64(src.Exp), 10)...)
f, err := strconv.ParseFloat(string(buf), 64)
if err != nil {
return 0, err
}
if src.Exp > 0 {
for i := 0; i < int(src.Exp); i++ {
f *= 10
}
} else if src.Exp < 0 {
for i := 0; i > int(src.Exp); i-- {
f /= 10
}
}
return f, nil
}