社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544
帮助:解析函数/expr
Expr是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。
类型 | 运算符 |
---|---|
组合(括号) | ( )
|
数字 | 1234.5 、 e (2.718) 、 pi (3.142)
|
科学计数法(二元) e 、 正负号(一元) + ,-
| |
一元运算符 | not ceil trunc floor abs exp ln sin cos tan acos asin atan
|
二元运算符 | ^
|
* / div mod
| |
+ -
| |
四舍五入 | round
|
逻辑运算符 | = != <> > < >= <=
|
and
| |
or
|
用于验证一个数学表达式,并返回它的计算值。
出自扩展 ParserFunctions。
此函数在Scribunto扩展中也可用,函数名为mw.ext.ParserFunctions.expr
。
- 格式
{{#expr: 表达式 }}
- 支持的运算符如右方表格所示,表格从上到下按运算符的计算优先顺序排列。
- 每个运算符的详细功能见Help:Calculation。
- 计算结果的精度和格式取决于wiki服务器的操作系统,和网站语言的数字格式。
- 例子
- 当用于计算布尔代数值(Boolean algebra)时,零值表示
false(假)
,任何非零值,无论正负,都表示ture(真)
:{{#expr: 1 and -1 }}
→1
{{#expr: 1 and 0 }}
→0
{{#expr: 1 or -1 }}
→1
{{#expr: -1 or 0 }}
→1
{{#expr: 0 or 0 }}
→0
- 输入空的表达式会返回一个空字串。输入不正确的表达式会返回其中一个错误消息,错误可以被iferror函数捕捉到:
{{#expr: }}
→{{#expr: 1+ }}
→表达式错误:缺少+的操作数。
{{#expr: 1 = }}
→表达式错误:缺少=的操作数。
{{#expr: 1 foo 2 }}
→表达式错误:无法识别的词语“foo”。
- 加减运算符在数字之前与之后的意义不同,它们有可能被当作正负号,而不会被当作不正确的表达式:
{{#expr: +1 }}
→1
{{#expr: -1 }}
→-1
{{#expr: + 1 }}
→1
{{#expr: - 1 }}
→-1
- 注意
- 如果使用魔术字的输出值,必须使用其原始格式,如:移除所有分割逗号,转换为数字。
- 比如
{{NUMBEROFUSERS}}
输出的是7,263,843
,但是实际需要的是7263843
,原始格式可以用{{formatnum:{{NUMBEROFUSERS}}|R}}
来得到,详见formatnum。例子如下:{{#expr:{{NUMBEROFUSERS}}+100}}
→表达式错误:无法识别的符号“,”。
{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→7263943
- 注意
- 运算符
mod
会在某些除数值下给出错误的结果:{{#expr: 123 mod (2^64-1)}}
→零除。
(返回空字串,结果本应是123
)
- 补充
- 若想要进行关于日期的计算(比如:将当前日期与某日期进行比较),首先应将时间转化为“1970年1月1日之后多少秒”的结构,可以使用
{{#time: xNU }}
来转换(详见time),然后就可以把日期当作数字来进行计算和比较了。 - 关于四舍五入
- 将运算符
round
左边的数四舍五入(Rounds),使其小数位数为round
右边的数。 - 如需进一取整(向上舍入),使用
ceil
;如需舍去取整(向下舍入),使用floor
。
例子 | 结果 | 舍入方法 |
---|---|---|
{{#expr: 1/3 round 5 }} |
0.33333 | 保留5位小数。舍去的部分首位数值<5,则不会进一。 |
{{#expr: 1/6 round 5 }} |
0.16667 | 保留5位小数。舍去的部分首位数值≥5,则进一。 |
{{#expr: 8.99999/9 round 5 }} |
1 | 同上方法,结果是进一得到的。 |
{{#expr: 1234.5678 round -2 }} |
1200 | 此处保留到百位。要保留到小数点左侧,应使用负的位数。 |
{{#expr: 1234.5678 round 2 }} |
1234.57 | 此处保留到百分位。要保留到小数点右侧,应使用正的位数。 |
{{#expr: 1234.5678 round 2.3 }} |
1234.57 | 位数值如果输入了带小数的数值,小数部分不起作用。 |
{{#expr: trunc 1234.5678 }} |
1234 | 保留到整数可以使用trunc 。
|
保留到整数的舍入规则: | ||
{{#expr: 1/3 round 0 }} |
0 | 保留到最近的整数,向下舍入至零。 |
{{#expr: 1/2 round 0 }} |
1 | 保留到最近的整数,向上舍入至一。 |
{{#expr: 3/4 round 0 }} |
1 | 保留到最近的整数,向上舍入至一。 |
{{#expr: -1/3 round 0 }} |
-0 | 保留到最近的整数,向上舍入至零。 |
{{#expr: -1/2 round 0 }} |
-1 | 保留到最近的整数,向下舍入至负一。 |
{{#expr: -3/4 round 0 }} |
-1 | 保留到最近的整数,向下舍入至负一。 |
使用ceil 和floor 时的舍入规则:
| ||
{{#expr: ceil(1/3) }} |
1 | 向上舍入至一。 |
{{#expr: floor(1/3) }} |
0 | 向下舍入至零。 |
{{#expr: ceil(-1/3) }} |
-0 | 向上舍入至零。 |
{{#expr: floor(-1/3) }} |
-1 | 向下舍入至负一。 |
{{#expr: ceil 1/3 }} |
0.33333333333333 | 没有被舍入处理,因为1 就是整数注意:上述表达式含义为 (ceil 1)/3 ,而不是ceil(1/3) ,应注意。
|
- 关于字符串
- 表达式只能用于数字值,不能比较字串或者字符。如需比较字串和字符,请使用ifeq。例子:
{{#expr: "a" = "a" }}
→表达式错误:无法识别的符号“"”。
{{#expr: a = a }}
→表达式错误:无法识别的词语“a”。
{{#ifeq: a | a | 1 | 0 }}
→1