There are many situations where formulas can be used in Rainmeter to arrive at a numerical result. These might be things like:
- In a Calc measure:
Formula=(2.5 + 100) * 2
- In an IFCondition option value:
IfCondition=MeasureName > (2.5 + 100) * 2
- In a numeric meter or measure option value:
W=((2.5 + 100) * 2)
- As a numeric part of an option value:
FontColor=(255 * 0.5),255,255,255
- In a Bang:
LeftMouseUpAction=[!SetOption SomeMeter W "((2.5 + 100) * 2)"]
There are a few place where formulas are not allowed. These are primarily places where the option value is assumed to be a string and only a string. In those cases, the characters used in a formula are treated as any other string character. A few examples are:
Textoption of a String meter.
Stringoption of a String measure.
RegExpoption of a WebParser measure.
While formulas can be used in the [Variables] section of a skin, be aware that the [Variables] section itself does not resolve the formula. If you have a variable
MyVar=(5 * 2), then the value of #MyVar# is not "10", but literally "(5 * 2)". However, if you then use the variable in an option that does allow formulas, that option itself will do the math, as in
X=#MyVar# in a meter.
Mathematical formulas must be entirely enclosed in (parentheses) to alert Rainmeter that it is a formula, unless they are being used in the Formula option of a Calc measure or in a IfCondition option, where the function is always assumed to be a formula, and the enclosing parentheses are optional.
Note: While [Measures], [SectionVariables:] and #Variables# can be used in a formula, all the components of a formula must be numeric, using only numbers, operators, functions and constants. Using .5 or .25 in a formula will cause an error. It must be 0.5 or 0.25.
%: Remainder or modulus
&: Bitwise AND
|: Bitwise OR
^: Bitwise XOR
~: Bitwise NOT
<>: Not equal
=: Equal to
>: Greater than
<: Less than
<=: Less than or equal to
>=: Greater than or equal to
&&: Logical AND
||: Logical OR
Conditional statements using logical operators evaluate to 1 or 0 (true / false).
|| operators must have the conditions on either side enclosed in (parentheses).
(MyMeasure = 5) || (MyMeasure = 10)
Cos(x): The cosine of an angle of x radians.
Sin(x): The sine of an angle of x radians.
Tan(x): The tangent of an angle of x radians.
Acos(x): The principal arc cosine of x, in the interval [0,PI] radians. The value of x is between -1 and 1.
Asin(x): The principal arc sine of x, in the interval [-PI/2,+PI/2] radians. The value of x is between -1 and 1.
Atan(x): The principal arc tangent of x, in the interval [-PI/2,+PI/2] radians.
Atan2(y, x): The principal arc tangent in the interval [-PI,+PI] radians between points y and x in the Cartesian plane. The sign of the elements determines the quadrant.
Rad(x): Converts x degrees to radians.
Deg(x): Converts x radians to degrees.
Abs(x): Absolute value of x.
Neg(x): Negative value of x.
Exp(x): Returns ex.
Log(x): Base 10 logarithm of x.
Ln(x): Natural logarithm of x.
Sqrt(x): Square root of x.
Sgn(x): Return 1 if x is positive, -1 if x is negative, or 0 if x is zero.
Frac(x): Fractional, or decimal, part of x. (e.g. frac(1.234) = 0.234)
Trunc(x): Integer part of x. (e.g. trunc(1.234) = 1)
Floor(x): Floor of x.
Ceil(x): Ceiling of x.
Min(x, y): Minimum of x and y.
Max(x, y): Maximum of x and y.
Clamp(x, low, high): Restricts value x to low and high limits.
Round(x, precision): Rounds x to an integer, or to a specified number of decimal places. precision is optional.
PI: Mathematical constant Pi (~3.14159265...).
E: Mathematical constant e (~2.71828182...).
<condition> ? <expr. if true.> : <expr. if false.>
This will evaluate condition as being either true or false. If it is true, the expression to the left of the colon (:) is evaluated. If it is false, the expression to the right is evaluated. This is equivalent to the following if-then-else statement:
The meter would be positioned at
X=0 since the condition
[Measure] < 6 evaluates to true.
Conditional operators can be nested. It should be noted that there is a maximum of 30 nested operators.
The meter would be positioned at
X=97. Since the first statement of
[Measure] < 1 is false, the formula begins testing the nested formulas in order until the condition becomes true . If none of the conditions are met, the final false value of 96 would be set.