diff --git a/src/filters/math.ts b/src/filters/math.ts index cb6775bff..61b8e5a95 100644 --- a/src/filters/math.ts +++ b/src/filters/math.ts @@ -8,7 +8,7 @@ export const divided_by = argumentsToNumber((dividend: number, divisor: number, export const floor = argumentsToNumber(Math.floor) export const minus = argumentsToNumber((v: number, arg: number) => v - arg) export const plus = argumentsToNumber((lhs: number, rhs: number) => lhs + rhs) -export const modulo = argumentsToNumber((v: number, arg: number) => v % arg) +export const modulo = argumentsToNumber((v: number, arg: number) => ((v % arg) + arg) % arg) export const times = argumentsToNumber((v: number, arg: number) => v * arg) export function round (v: number, arg = 0) { diff --git a/test/integration/filters/math.spec.ts b/test/integration/filters/math.spec.ts index ab52cb4be..3f4f7ba0a 100644 --- a/test/integration/filters/math.spec.ts +++ b/test/integration/filters/math.spec.ts @@ -50,6 +50,9 @@ describe('filters/math', function () { expect(Number(html)).toBeCloseTo(3.357, 3) }) it('should convert string', () => test('{{ "24" | modulo: "7" }}', '3')) + it('should follow divisor sign for negative dividend', () => test('{{ -7 | modulo: 3 }}', '2')) + it('should follow divisor sign for negative divisor', () => test('{{ 7 | modulo: -3 }}', '-2')) + it('should follow divisor sign for negative float', () => test('{{ -4.5 | modulo: 3 }}', '1.5')) }) describe('plus', function () { it('should return "6" for 4,2', () => test('{{ 4 | plus: 2 }}', '6'))