Skip to content

Commit 77d1571

Browse files
committed
fix(percentage): handle decimal points
1 parent 6bd89d0 commit 77d1571

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

src/index.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@ describe("Evaluate Numerical Expressions", () => {
1717

1818
it("Handle % for tax", () => {
1919
expect(evalNumExpr("10+18%")).toBe(11.8);
20+
expect(evalNumExpr("10+18.0%")).toBe(11.8);
21+
expect(evalNumExpr("10-18.0%")).toBe(8.2);
2022
expect(evalNumExpr("10+10+18%")).toBe(23.6);
2123
expect(evalNumExpr("100+(10+10+18%)")).toBe(123.6);
2224
expect(evalNumExpr("175 + 40 + 18%")).toBe(253.7);
2325
});
2426
it("Handle % for percentage", () => {
2527
expect(evalNumExpr("2*5+6%2")).toBe(10.12); // 2 * 5 + 6/100 * 2
2628
expect(evalNumExpr("10*6%")).toBe(0.6);
29+
expect(evalNumExpr("20+20%%")).toBe(20.002);
2730
expect(evalNumExpr("10 + 10*5%")).toBe(10.5);
2831
expect(evalNumExpr("10 + (100 - 100 * 18%) * 5 + 40 / 20")).toBe(422);
2932
});

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ function tokenize(
193193
.replace(/\s/gi, "") // replace all spaces
194194
.replace(/[xX]/gi, "*") // replace the x with multiplier *
195195
.replace(/[^+-/*^\d().%]/g, "")
196-
.replace(/\+(\d+)%(?![*/(\d])/gi, "add_percentage$1")
197-
.replace(/-(\d+)%(?![*/(\d])/gi, "sub_percentage$1")
196+
.replace(/\+([\d.]+)%(?![*/%(\d])/gi, "add_percentage$1")
197+
.replace(/-([\d.]+)%(?![*/%(\d])/gi, "sub_percentage$1")
198198
.replace(/%([\d(])/gi, "/100*$1")
199199
.replace(/%/gi, "/100")
200200
// i have no idea why commas were not replaced :(

0 commit comments

Comments
 (0)