Help:Modulo and round
The MediaWiki extension ParserFunctions enables users to perform simple mathematical computations.
#expr and #ifexpr allow mod and round.
Operator  Operation  Example 

mod  "Modulo" (PHP operator %): if a is nonnegative, a mod b is the remainder by division after truncating both operands to an integer, while (a) mod b =  ( a mod b). Caveats:

Template:Evaldemo Template:Evaldemo Template:Evaldemo Template:Evaldemo (should be 2.6) Template:Evaldemo (should be 1.6) Template:Evaldemo (should be 2.9) 
round  (PHP function round): rounds the number on the left to the nearest multiple of 1/10 raised to the power given on the right; if two are equally near, rounding is away from zero.  Template:Evaldemo Template:Evaldemo Template:Evaldemo 
Problem with mod in Windows:
 Template:Evd (should be 147483650; on Windows 147483646)
 Template:Evd (should be 147483649; on Windows 147483647)
 Template:Evd (should be 147483648; on Windows correct)
 Template:Evd (should be 147483647; on Windows correct)
 Template:Evd (should be 147483646; on Windows correct)
 Template:Evd (should be 147483647; on Windows correct)
 Template:Evd (should be 147483648; on Windows 147483648)
 Template:Evd (should be 147483649; on Windows 147483647)
See also Template:Tim, and operator fmod in mw:Extension:ParserFunctions (extended), which both do not have these problems. Also, in file expr.php (the standard one or the extended one) operation "$left % $right" can be replaced by "fmod($left,$right)".
Spaces around mod and round are good for readability but not needed for working properly:
Precedence:
(first additions, then round)
(mod and multiplication have equal precedence, evaluation from left to right)
To remind the reader of the precedence, one might write:
 When using spaces where there is precedence, the layout of the expression may be confusing:
 Template:Evaldemo
 Instead one can write:
 Template:Evaldemo
 or simply use parentheses:
 Template:Evaldemo
[edit] Mod
To get a positive mod even for a negative number, use e.g. (700000 + x) mod7 instead of x mod7. The range of the result is now 06, provided that x > 700000.
Alternatively, use
 6  ( 700006  x ) mod7
or
 (x  700006) mod7 + 6.
The range of the result is 06, provided that x < 700006.
Working for all x is:
 (x mod7 + 7) mod7
[edit] Round
To round an integer plus one half for x > 100000 toward plus infinity, use:
 (x + 100000 round 0)  100000
and to round an integer plus one half for x < 100000 toward minus infinity, use:
 (x  100000 round 0) + 100000
To round x toward minus infinity, use:
 x + ( x != x round 0 ) * ( ( ( x  .5 ) round 0 )  x )
and toward plus infinity
 x + ( x != x round 0 ) * ( ( ( x + .5 ) round 0 )  x )
If x is a long expression this multiplies the length by 5! Under conditions for x there are alternatives:
To round x > 100000 toward minus infinity, use:
 (x  100000.5 round 0) + 100000
and to round x < 100000 toward plus infinity, use:
 (x + 100000.5 round 0)  100000
If x is a multiple of 1/n with n<1000 we can round toward minus infinity with:
 x  .499 round 0
For arbitrary n > 1 we can choose instead of .499 any number between .5 and .5 + 1/n.
To find the largest multiple of 7 not larger than x (i.e. to round toward minus infinity to a multiple of 7) we can do:
 ((x3)/7 round 0) * 7