Skip to content

Commit d8b0074

Browse files
fixing scale of + and - (#61)
1 parent a10f89b commit d8b0074

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

values.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,20 @@ func (value *Number) scaleUp(scale int) int64 {
181181
}
182182

183183
func (left *Number) Plus(right *Number) *Number {
184-
scale := left.typ.scale + right.typ.scale
184+
scale := left.typ.scale
185+
if scale < right.typ.scale {
186+
scale = right.typ.scale
187+
}
185188
lv, rv := left.scaleUp(scale), right.scaleUp(scale)
186189

187190
return &Number{lv + rv, &NumberType{scale}}
188191
}
189192

190193
func (left *Number) Minus(right *Number) *Number {
191-
scale := left.typ.scale + right.typ.scale
194+
scale := left.typ.scale
195+
if scale < right.typ.scale {
196+
scale = right.typ.scale
197+
}
192198
lv, rv := left.scaleUp(scale), right.scaleUp(scale)
193199

194200
return &Number{lv - rv, &NumberType{scale}}

values_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ func (s *Zuite) TestNumber_Plus() {
125125
right: MustNewValue("3").(*Number),
126126
expected: MustNewValue("5.0").(*Number),
127127
},
128+
{
129+
left: MustNewValue("2.0").(*Number),
130+
right: MustNewValue("3.0").(*Number),
131+
expected: MustNewValue("5.0").(*Number),
132+
},
128133
}
129134
for _, ex := range cases {
130135
actual := ex.left.Plus(ex.right)
@@ -149,6 +154,11 @@ func (s *Zuite) TestNumber_Minus() {
149154
right: MustNewValue("3").(*Number),
150155
expected: MustNewValue("-1.0").(*Number),
151156
},
157+
{
158+
left: MustNewValue("2.0").(*Number),
159+
right: MustNewValue("3.0").(*Number),
160+
expected: MustNewValue("-1.0").(*Number),
161+
},
152162
}
153163
for _, ex := range cases {
154164
actual := ex.left.Minus(ex.right)

0 commit comments

Comments
 (0)