Smarty Manual
Prev | Chapter 8. Custom Functions | Next

# math

Attribute Name | Type | Required | Default | Description
--- | --- | --- | --- | ---
equation | string | Yes | n/a | the equation to execute
format | string | No | n/a | the format of the result (sprintf)
var | numeric | Yes | n/a | equation variable value
assign | string | No | n/a | template variable the output will be assigned to
[var ...] | numeric | Yes | n/a | equation variable value

math allows the template designer to do math equations in the template. Any numeric template variables may be used in the equations, and the result is printed in place of the tag. The variables used in the equation are passed as parameters, which can be template variables or static values. +, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt, srans and tan are all valid operators. Check the PHP documentation for further information on these math functions.

If you supply the special "assign" attribute, the output of the math function will be assigned to this template variable instead of being output to the template.

> Technical Note: math is an expensive function in performance due to its use of the php eval() function. Doing the math in PHP is much more efficient, so whenever possible do the math calculations in PHP and assign the results to the template. Definately avoid repetitive math function calls, like within section loops.

Example 8-14. math
    {* $height=4, $width=5 *}

    {math equation="x + y" x=$height y=$width}

    OUTPUT:

    9

    {* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *}

    {math equation="height * width / division"
          height=$row_height
          width=$row_width
          division=#col_div#}

    OUTPUT:

    100

    {* you can use parenthesis *}

    {math equation="(( x + y ) / z )" x=2 y=10 z=2}

    OUTPUT:

    6

    {* you can supply a format parameter in sprintf format *}

    {math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}

    OUTPUT:

    9.44

Prev | Home | Next
html_table | Up | mailto