The transforms in this category perform mathematical functions on values:

Transform | Description |
---|---|

mathAbs | Returns the absolute value of a number |

mathAdd | Adds a number to the value |

mathCeiling | Rounds the value to the smallest integer greater than or equal to the value |

mathDivide | Divides the value by the given divisor |

mathFloor | Rounds the value to the largest integer less than or equal to the value |

mathMultiply | Multiplies the value by the given factor |

mathRound | Rounds the value to the nearest integer |

mathSubtract | Subtracts a number from the value |

## Leading Zeroes

To perform math operations, ORA converts text values to numbers and the conversion drops any leading zeroes. For example, if a field named ImageNumber has the value "00183", the result of `[ImageNumber:mathAdd:1]`

is "184".

If you need a number padded on the left with zeroes, use the padLeft transform.

### Remove Leading Zeroes

Because ORA converts text values to numbers and that conversion removes leading zeroes, you may use mathAdd to remove leading zeroes without incrementing the number: just add zero! For example, if a field named ImageNumber has the value "00183", the result of `[ImageNumber:mathAdd:0]`

is "183".

## Trailing Zeroes

To perform math operations, ORA converts text values to numbers and that conversion drops any trailing zeroes in the fractional part of a real number. For example, if a field named Price has the value "1.20", the result of `[Price:mathAdd:1]`

is "2.2".

As you can see from the example, the trailing zero has been removed. You may want to retain a certain number of digits after the decimal point, or convert numbers with a varying number of digits to the same number of digits by padding with zeroes. Unfortunately, padding to a certain number of digits *after a decimal point* is not directly supported by an ORA transform and manual methods are tricky. The replace transform will suffice in some cases though its fragile as a general-purpose solution. The basic idea is to use a replacement pattern that matches a value that needs a trailing zero then replace the matching text with the original text and an extra zero.

For example, if you want a field named Rate to have two digits after the decimal point, where some values have two digits ("1.25") and others have one digit ("1.2"), you can match the one-digit values and replace them with the original digit and a trailing zero:

`[Rate:replace:(?<v>\.\d)$:$<v>0:g]`

The pattern "`(?<v>\.\d)$`

" matches a period followed by a single digit at the end of the Field value. The parentheses and the special "`?<v>`

" notation create a named capture group with the name "`v`

". Typically, we can use capture groups that are automatically numbered sequentially, but in this case, we want to use the capture group followed by a digit in the replacement value. Without using a named capture group, the transform would look like this, and it would **not** work:

`[Rate:replace:(.\d)$:$10:g]`

To the Regular Expression parser, "`$10`

" in the replacement value looks like a reference to capture group **ten**, not a reference to capture group **one** followed by a zero. To get around that issue, the working example uses a named capture group and that requires the use of "`?<v>`

" to name the group and "`$<v>`

" to refer to it.

## mathAbs

Returns the absolute value of a number.

For example, if a Field named Difference has the value "-3", the result of `[Difference:mathAbs]`

is "3".

If the value is not numeric, returns an empty string.

## mathAdd:*number*

Adds a number to the value.

For example, if a field named ImageNumber has the value "00813", the result of `[ImageNumber:mathAdd:1]`

is "814".

If the value or the number is not numeric, returns an empty string.

## mathCeiling

Rounds the value to the smallest integer greater than or equal to the value.

For example, if a field named Age has the value "3.2", the result of `[Age:mathCeiling]`

is "4".

If the value is not numeric, returns an empty string.

## mathDivide:*divisor*

Divides the value by the given divisor.

For example, if a field named Weeks has the value "18", the result of `[Weeks:mathDivide:4]`

is "4.5".

If the value or the divisor is not numeric, or if the divisor is zero, returns an empty string.

## mathFloor

Rounds the value to the largest integer less than or equal to the value.

For example, if a field named Age has the value "3.2", the result of `[Age:mathFloor]`

is "3".

If the value is not numeric, returns an empty string.

See: mathCeiling, mathRound

## mathMultiply:*factor*

Multiplies the value by the given factor.

For example, if a field named Weeks has the value "4", the result of `[Weeks:mathMultiply:7]`

is "28".

If the value or the factor is not numeric, returns an empty string.

## mathRound

Rounds the value to the nearest integer.

For example, if a field named Age has the value "3.4", the result of `[Age:mathRound]`

is "3". If a field named Age has the value "3.5", the result of `[Age:mathRound]`

is "4".

If the value is not numeric, returns an empty string.

See: mathCeiling, mathFloor

## mathSubtract:*number*

Subtracts a number from the value.

For example, if a field named ImageNumber has the value "00813", the result of `[ImageNumber:mathSubtract:1]`

is "812".

If the value or the number is not numeric, returns an empty string.