# Shortcuts and Modulo Calculations

The i*OS Shortcuts application has a surprising amount of numerical functions tucked away within its calculation actions. These include not only statistical functions, but also some arithmetic functions familiar to many programmers. One of these is the modulus function. Many of you may have used this in your mathematical studies at school. It is frequently used as the basis for time calculations on 12 and 24 hour clocks. But there’s more than one way to apply a modulus.

Let’s define a generic modulus operation and have it accept two numbers. A value, and a modulus - `mod(value,modulus)`. To find the result, we would divide the value by the modulus and look at the remainder.

For example, using a modulus of 3, we can see a pattern that forms like so.

``````mod(1,3) = 1 => 1 / 3 = 0 r 1
mod(2,3) = 2 => 2 / 3 = 0 r 2
mod(3,3) = 0 => 3 / 3 = 0 r 3
mod(4,3) = 1 => 4 / 3 = 1 r 1
mod(5,3) = 2 => 5 / 3 = 1 r 2
mod(6,3) = 0 => 6 / 3 = 1 r 3
mod(7,3) = 1 => 7 / 3 = 2 r 1
``````

Hopefully that’s relatively straight forward to follow. But what if we aren’t dealing with whole number, integer values?

If we take the broadest example above of looking at the remainder, then `mod(5.6,3) = 2.6 => 5.6 / 3 = 1 r 2.6`. But, some programming definitions of a modulus go a little further and and say that it is not simply the value divided by the modulus and look at the remainder, but rather the division should be integer division, thus meaning only the integer part of the remainder would be retained. By that definition, `mod(5.6,3) = 2 => INTEGER_PART(5.6 / 3) = 1 r 2`.

Some programming languages implement one version of modulus. Other languages implement the other. A few (such as C), implement both - one for integers and one for non-integers (such as C’s `fmod()` function for floating point (float) numbers).

The Shortcuts modulus function is based on integer division, but sometimes it can be useful to have a modulus function with a broader operation that retains the factional part. To that end I created a little shortcut to support just that.

The shortcut takes a single list parameter. It expects the first list item to be the value and the second list item to be the modulus. It ignores other list items, and it does not carry out any validation against the values it receives. The modulus is calculated based on the following equation.

``````value - INTEGER_PART((value / modulus) * modulus)
``````

Since Shortcuts has no integer part operation, that is derived by splitting a number on the decimal point and taking the first item from the resulting list. If you are in a country that uses a different decimal separator such as a comma (“,”), then you would need to modify the shortcut accordingly.

Below are two shortcuts, Modulus, and Modulus Test. Modulus is the shortcut that carries out the calculation shown above. Modulus Test is an example shortcut that calls both Modulus, and performs Shortcuts’ own modulus calculation and shows the results alongside each other. It’s pre-populated with the `mod(5.6,3)` example from above and gives the following result: Shortcuts

The Modulus shortcut’s actions break down as follows. The moral of this story is that even when Shortcuts doesn’t provide the exact function you are looking for, there’s almost always a way to simply build it yourself.

Author: Stephen Millard
Tags: | shortcuts |

## Related posts that you may also like to read

• ## Automation Documentation: Hooking Apple Shortcuts

01 Jun 2022

Earlier this week I wrote about how I was using Hook and Obsidian to support my documentation of automations. In this post I will aim to explain how I am using this set up to help me access documentation for my Apple Shortcuts automations.

• ## A Keyboard Maestro Plugin for Apple Shortcuts

05 Dec 2021

With the public release of macOS Monterey, I have been trying out a few ways of interacting with Shortcuts from a number of automation tools. Shortcuts can be triggered on macOS using AppleScript or shell script, both of which are relatively easy to do with the Swiss Army knife of Mac automation, Keyboard Maestro. However, I thought it would be fun to create a convenience plugin to make it even easier to integrate Keyboard Maestro with Shortcuts.

• ## Bypass - Shortcuts Support for Stream Deck

04 Dec 2021

A few weeks ago I released version 1 of an Alfred workflow called Bypass. I created it to help use Apple’s Shortcuts app on the Mac. I have been continuing to expand the functionality, and have now released v1.1 with many new features.

One of the areas I spent a bit of time working on was a way to make Shortcuts easier to use with the Elgato Stream Deck, and in this post I’m going to walk through how Bypass now supports setting up Shortcuts on the Stream Deck.

• ## Alfred Workflow - Bypass for Shortcuts

12 Nov 2021

I recently updated my Macbook Pro to macOS Monterey, and with it I got access to running Shortcuts on the Mac. Being a long time power user of Shortcuts, all the way back to the first release of Workflow, it was quite exciting to get my hands on the app. I’ve been enjoying experimenting with it, but I decided I needed to improve the accessibility. Enter one of my favourite Mac apps, Alfred.