Fixes an issue during add/subtract with a small number with scale 29. Effectively, what happened is that the number was able to be "aligned" within a 32 bit boundary however because it used scale 29 it was "optimized" away when reconstructing the decimal.
Scale 30, even though invalid, was ok since it continued scaling back until it reached a scale of 28. Scale 29 however effectively stopped scaling and was forced to 28 during reconstruction. This fix forces scale 29 to also be scaled down to scale 28 before reconstruction. The alternative solution would be to retain a scale of 29 however that could lead to subtly incorrect values (i.e. -0.09999999999999999999999999990 with the trailing zero). Since the decimal library constrains scale to 0 to 28 in most cases (rescaling is the exception) it makes sense to continue scaling to 28 during these calculations.
Fixes #618
Fixes an issue during add/subtract with a small number with scale 29. Effectively, what happened is that the number was able to be "aligned" within a 32 bit boundary however because it used scale 29 it was "optimized" away when reconstructing the decimal.
Scale 30, even though invalid, was ok since it continued scaling back until it reached a scale of 28. Scale 29 however effectively stopped scaling and was forced to 28 during reconstruction. This fix forces scale 29 to also be scaled down to scale 28 before reconstruction. The alternative solution would be to retain a scale of 29 however that could lead to subtly incorrect values (i.e.
-0.09999999999999999999999999990
with the trailing zero). Since the decimal library constrains scale to 0 to 28 in most cases (rescaling is the exception) it makes sense to continue scaling to 28 during these calculations.