# 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 suport just that.

The shortcut takes a single list parameter. It expects the first list item to be the value anf 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 saparator 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

• ## Shortcuts: Extract Contact's Mobile Phone Number

10 Sep 2019

Recently there was a query on the Automators podcast forum, where someone wanted to know how to retrieve a mobile phone number from a contact using Shortcuts. This isn’t something that Shortcuts supports “out-of-the-box”, but it is something that Shortcuts can do with a bit of cajoling. In this post I’ll explain some of the details about one way of doing it.

• ## Evaluating JavaScript in Shortcuts

23 Aug 2019

Shortcuts is a versatile automation tool on iOS, but it does have limitations. Many of these stem from it not being a true scripting/programming language, but rather a visual automation tool. When compared to alternatives like Pythonista or Scriptable, the app comes up a little short on things you might like to do with it sometimes that would be easier in other programming langugages? But what if I told you that Shortcuts can actually tap into some of that coding power through a technique for evaluating JavaScript? Interested? Well let me explain.

• ## Create a Nice PDF with Drafts and Shortcuts

10 Mar 2019

Early last month, a student teacher was posting on the Automators forum about using Drafts to make dealing with templates such as lesson plans easier. Through a bit of discussion in the thread, it came about that the student teacher really just was looking for a way to get simple text entry into a format compatible with the template - i.e. printable vs. editable. With this amendment I was able to put together an example based on the template they provided that would transform text in a draft via a Drafts action and Shortcuts into a nicely formatted PDF document.

In this post I’m going to review the solution and approach as to how I did that.

• ## Editing Large Amounts of Text in Shortcuts

26 Feb 2019

Last year I posted a small piece on text editing to the Automators forum. It was inspired by another post on the Drafts forum and focused on coming up with a way to edit text making more use of the screen estate than the paltry offering of the standard text options in Shortcuts. The premise was simply to enable a larger text editing area via Scriptable.