From bdb92bb4b9f5590e8cb3fde094481a8e94cdfe7d Mon Sep 17 00:00:00 2001 From: Denis Bernard Date: Sat, 23 May 2020 17:16:52 +0200 Subject: [PATCH] Decimal: fix missing sign handling from (*Decimal).Float --- decimal.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/decimal.go b/decimal.go index 38f6ea7..f717232 100644 --- a/decimal.go +++ b/decimal.go @@ -440,7 +440,11 @@ func (x *Decimal) Float(z *big.Float) *big.Float { switch x.form { case zero: - return z.SetPrec(p) + z.SetPrec(p) + if x.neg != z.Signbit() { + z.Neg(z) + } + return z case inf: return z.SetInf(x.neg).SetPrec(p) } @@ -455,6 +459,9 @@ func (x *Decimal) Float(z *big.Float) *big.Float { m := len(x.mant) * _DW exp := int64(x.exp) - int64(m) z = z.SetInt(&i) + if x.neg { + z.Neg(z) + } // z = x·2**(m - x.exp)·5**(m - x.exp) // normalize mantissa and apply 2 exponent