# mod

Learn how to use the mod (%) operator to obtain a remainder in Notion formulas.

The

**remainder (**`%`

**)**operator allows you to get the**remainder**after dividing the first operand with the second operand.1

number % number

2

mod(number, number)

Notion provides a

`mod()`

function as well as `%`

and `mod`

operators (I'll just reference `%`

for the rest of this article). Somewhat confusingly, these do not return a true modulus value; they return a remainder (see: Remainder or Modulus? below).

As

`%`

and `mod()`

output a remainder, their output values will take the sign (`+/-`

) of the dividend.For reference, the

**dividend**is the number being divided by the**divisor**, which produces the**quotient**:$\frac {dividend}{divisor} = quotient$

1

19 % 12 // Output: 7

2

3

19 mod 12 // Output: 7

4

5

mod(-19,12) // Output: -7

If the divisor is negative:

`mod()`

will treat it as a negative integer natively.- if you're using the
`%`

operator, you'll need to wrap your divisor in parentheses`()`

in order to explicitly define your divisor as a negative integer.`x % (-y)`

will work exactly like`mod().`

`x % -y`

will cause Notion to rewrite your formula as`x / 100 - y`

, which will output an incorrect result. This is because the`-`

is treated as a unaryMinus operator, and Notion's math engine can't correctly deal with it when it's appended to the divisor.

1

19 % (-12) // Output: 7

2

3

// Negative value passed via a property does not need to

4

// be wrapped in () symbols

5

6

prop("negative num") == -12

7

19 % prop("negative num") // Output: 7

8

9

19 % -12 // Rewritten as 19 / 100 - 12, outputs -11.81

10

11

mod(19,-12) // Output: 7

Note: The above rules only apply if you're hard-coding a negative divisor in a formula. If you pass one via a property, it'll be parsed as a true negative value. It won't add a unaryMinus operator to your formula.

Just as in JavaScript, Notion’s

`%`

operator calculates the **remainder**of two numbers, not the**modulus.**Confusingly, the`mod()`

function does this as well, despite its name.The

**remainder**and**modulus**of two numbers will be identical when both the dividend and divisor have the same sign (`+/-`

). If their signs differ, however, the modulus will differ from the remainder.You can prove this using WolframAlpha:

`-19 mod 12`

results in`5`

`QuotientRemainder[-19,12]`

results in`-7`

To calculate a true modulus in Notion, use

`((x % y) + y) % y`

instead:1

// Using the % operator

2

((19 % 12) + 12) % 12

3

4

// Using the mod() formula

5

mod(mod(19, 12) + 12, 12)

6

7

// % operator example using hard-coded negative divisors

8

((19 % (-12)) + (-12)) % (-12)

As noted above in the

**Negative Divisors**section, hard-coded negative divisors in`%`

expressions need to be wrapped in parentheses `()`

so Notion can parse them explicitly as negative integers (see code line `7`

in the above code block). Otherwise, Notion will interpret the

`-`

as a unaryMinus operator, rewrite your formula to `(x / 100 - y + -y) / 100 - y`

, and return an incorrect result. However, this isn't necessary when using the `mod()`

function.I recommend reading Dr. Axel Rauschmayer's Remainder Operator vs. Modulo Operator article to fully understand this, but here's a summary.

To find a

**remainder**, the formula is:

$remainder = dividend - divisor * quotient$

In JavaScript, the

`%`

operator accomplishes this using the following function:1

// x == dividend, y == divisor

2

remainder = x - y * Math.trunc(x/y);

The Math.trunc() function simply chops all of the decimals off of a number and returns only what was left of the decimal point. In more precise terms, it rounds a number towards zero, no matter how how the decimal point.

1

Math.trunc(2.9) == 2

2

Math.trunc(-2.9) == -2

To put it another way, Math.trunc() acts like Math.floor() when its argument is positive, and acts like Math.ceil() when its argument is negative. For reference:

`Math.ceil()`

rounds towards positive infinity`Math.floor()`

rounds towards negative infinity

*Note:*The

`trunc()`

function doesn't exist in Notion's formula editor, but you can create it with: `(prop("Num") >= 0) ? floor(prop("Num")) : ceil(prop("Num"))`

The formula for finding a

**modulus**is the same, with one major difference: it uses the`floor()`

function instead of `trunc()`

.1

// x == dividend, y == divisor

2

modulus == x - y * Math.floor(x/y);

When the dividend and divisor have the same sign, the results from both formulas will be the same.

But when they are opposite, these formulas return different results.

This happens because

`trunc()`

will always return an answer *one integer greater*than`floor()`

will when both have the same **negative**integer as their argument.1

Math.trunc(-2.9) == -2

2

Math.floor(-2.9) == -3

The difference causes different results in the overall modulus/remainder functions.

For fun, here's how you could manually create remainder and modulus functions in Notion without using

`mod()`

. Note how complicated the remainder code is due to Notion's lack of a `trunc()`

function!1

// Remainder function

2

prop("Dividend") - prop("Divisor") * ((prop("Dividend") / prop("Divisor") >= 0) ? floor(prop("Dividend") / prop("Divisor")) : ceil(prop("Dividend") / prop("Divisor")))

3

4

// Modulus function

5

prop("Dividend") - prop("Divisor") * floor(prop("Dividend") / prop("Divisor"))

This example database shows the differing outputs of

**remainder**and true**modulus**expressions.You can check these results here:

1

prop("Dividend") % prop("Divisor")

1

(prop("Dividend") % prop("Divisor") + prop("Divisor")) % prop("Divisor")

Instead of using hard-coded numbers, I’ve called in each property using the

`prop()`

function. My name is Thomas Frank, and I'm a Notion-certified writer, YouTuber, and template creator. I've been using Notion since 2018 to organize my personal life and to run my business and YouTube channel. In addition to this formula reference, I've created a free Notion course for beginners and several productivity-focused Notion templates. If you'd like to connect, follow me on Twitter.

Last modified 4mo ago