aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--decimal.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/decimal.go b/decimal.go
index 0f5079c..ca277cf 100644
--- a/decimal.go
+++ b/decimal.go
@@ -386,14 +386,15 @@ func (d Decimal) Rescale(exp int32) Decimal {
//
func (d Decimal) rescale(exp int32) Decimal {
d.ensureInitialized()
- // NOTE(vadim): must convert exps to float64 before - to prevent overflow
- diff := math.Abs(float64(exp) - float64(d.exp))
+ // NOTE: convert exps to int64 before - to prevent overflow
+ diff := int64(exp) - int64(d.exp)
value := new(big.Int).Set(d.value)
- expScale := new(big.Int).Exp(tenInt, big.NewInt(int64(diff)), nil)
if exp > d.exp {
+ expScale := new(big.Int).Exp(tenInt, big.NewInt(diff), nil)
value = value.Quo(value, expScale)
} else if exp < d.exp {
+ expScale := new(big.Int).Exp(tenInt, big.NewInt(-diff), nil)
value = value.Mul(value, expScale)
}