社区文档构建中,欢迎编辑。 社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544

全站通知:

帮助:解析函数/expr

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

Expr是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。

类型 运算符
组合(括号) ( )
数字 1234.5e (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}}输出的是4,845,804,但是实际需要的是4845804,原始格式可以用{{formatnum:{{NUMBEROFUSERS}}|R}}来得到,详见formatnum。例子如下:
{{#expr:{{NUMBEROFUSERS}}+100}}表达式错误:无法识别的符号“,”。
{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}4845904
注意
运算符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 保留到最近的整数,向下舍入至负一。
使用ceilfloor时的舍入规则:
{{#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