From 0854e3fb2b9789b56b71d0e40e59a29bf82bd76f Mon Sep 17 00:00:00 2001 From: Tz-Huan Huang Date: Wed, 8 Sep 2021 11:52:30 +0800 Subject: [PATCH 1/2] Fix a long standing bug in Decimal128.fromString() - https://github.com/mongodb/js-bson/issues/334 - https://jira.mongodb.org/browse/NODE-3021 --- src/decimal128.ts | 2 +- test/node/decimal128_tests.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/decimal128.ts b/src/decimal128.ts index ccf35743..a7b58317 100644 --- a/src/decimal128.ts +++ b/src/decimal128.ts @@ -304,7 +304,7 @@ export class Decimal128 { lastDigit = nDigitsStored - 1; significantDigits = nDigits; if (significantDigits !== 1) { - while (representation[firstNonZero + significantDigits - 1] === '0') { + while (digits[firstNonZero + significantDigits - 1] === 0) { significantDigits = significantDigits - 1; } } diff --git a/test/node/decimal128_tests.js b/test/node/decimal128_tests.js index 9789cf8e..e198119b 100644 --- a/test/node/decimal128_tests.js +++ b/test/node/decimal128_tests.js @@ -1210,6 +1210,8 @@ describe('Decimal128', function () { expect(new Decimal128('00').toString()).to.equal('0'); expect(new Decimal128('0.5').toString()).to.equal('0.5'); expect(new Decimal128('-0.5').toString()).to.equal('-0.5'); + expect(new Decimal128('-0.0097').toString()).to.equal('-0.0097'); + expect(new Decimal128('-0.0011').toString()).to.equal('-0.0011'); expect(new Decimal128('-1e400').toString()).to.equal('-1E+400'); done(); }); From 70fefa555b49e042ae2738ab983ab0eb21594c3b Mon Sep 17 00:00:00 2001 From: Tz-Huan Huang Date: Thu, 9 Sep 2021 11:01:48 +0800 Subject: [PATCH 2/2] Add more test cases for leading/trailing zeros Co-authored-by: Daria Pardue <81593090+dariakp@users.noreply.github.com> --- test/node/decimal128_tests.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/node/decimal128_tests.js b/test/node/decimal128_tests.js index e198119b..e5ba7df3 100644 --- a/test/node/decimal128_tests.js +++ b/test/node/decimal128_tests.js @@ -1212,6 +1212,9 @@ describe('Decimal128', function () { expect(new Decimal128('-0.5').toString()).to.equal('-0.5'); expect(new Decimal128('-0.0097').toString()).to.equal('-0.0097'); expect(new Decimal128('-0.0011').toString()).to.equal('-0.0011'); + expect(new Decimal128('-0.00110').toString()).to.equal('-0.00110'); + expect(new Decimal128('0.0011').toString()).to.equal('0.0011'); + expect(new Decimal128('0.00110').toString()).to.equal('0.00110'); expect(new Decimal128('-1e400').toString()).to.equal('-1E+400'); done(); });