For faster navigation, this Iframe is preloading the Wikiwand page for 帮助:计算.

帮助:计算

维基百科使用手册

借助于Mediawiki的扩展“函数解析器”,计算变得可行。

注意:目前此功能还有bug,详情见meta:Talk:ParserFunctions#Bugs

expr函数,计算数学表达式。语法为:

((#expr: 表达式 ))

表达式支持的运算符有:

运算符 名称 优先级 元数 结合性 样例
+ 9 1 ((#expr: + 7)) = 7
- 9 1 ((#expr: - 7)) = -7
not 逻辑非 9 1 ((#expr: not 7)) = 0
* 8 2 ((#expr: 30 * 7)) = 210
/ 8 2 ((#expr: 30 / 7)) = 4.2857142857143
div 8 2 ((#expr: 30 div 7)) = 4.2857142857143
mod 8 2 ((#expr: 30 mod 7)) = 2
+ 6 2 ((#expr: 30 + 7)) = 37
- 6 2 ((#expr: 30 - 7)) = 23
round 舍入 5 2 ((#expr: 30 / 7 round 7)) = 4.2857143
= 等于 4 2 ((#expr: 30 = 7)) = 0
< 小于 4 2 ((#expr: 30 < 7)) = 0
> 大于 4 2 ((#expr: 30 > 7)) = 1
<= 小于等于 4 2 ((#expr: 30 <= 7)) = 0
>= 大于等于 4 2 ((#expr: 30 >= 7)) = 1
<> 不等于 4 2 ((#expr: 30 <> 7)) = 1
!= 不等于 4 2 ((#expr: 30 != 7)) = 1
and 逻辑与 3 2 ((#expr: 30 and 7)) = 1
or 逻辑或 2 2 ((#expr: 30 or 7)) = 1

round运算对运算数正负,位数正负都有不同的表现,参见下例。

逻辑运算符把假映射为0,把真映射为非0,且返回值只有0或1。

同一表达式中先计算高优先级运算。括号优先级高于一切。

样例[编辑]

  • ((#expr: (100 - 32) / 9 * 5 round 0 )) = 38:转换摄氏华氏温度
  • ((#expr: 3 < 2 < 1)) = 1
  • ((#expr: 2 = 2 = 1)) = 1:与数学表达式不同,“=”、“<”、“>”等运算符有返回值
  • ((#expr: 999 * 999 round -2)) = 998000
  • ((#expr: 999 * 999 round -20)) = 0
  • ((#expr: 999 * 999 round -2.9)) = 998000:round的危险用法
  • ((#expr: 1 or 1 and 0)) = 1:优先级演示
  • ((#expr: 10.9 mod 2)) = 0:mod的危险用法
  • ((#expr: 30------7)) = 23
  • ((#expr: 30+++++7)) = 37:“+”、“-”运算符有两种含义
  • ((#expr: .)) = 0
  • ((#expr: .1.1)) = 0.1:实数表达法的多样性(会无视多出的小数点)
  • ((#expr: ( ( ) ))) = :特殊的括号用法,没有实际意义
  • ((#expr: 999999999*...*999999999)) = INF:数字上溢的结果
  • ((#expr:(-1)^0.5)) = NAN:无法计算虚数单位
  • ((Root|(-1))) = i:使用根号模板(详见Template:复变运算
  • ((複變運算|(-1)^0.5)) = i:使用复变运算模板
  • ((複變運算|e^(((-1)^0.5) * pi))) = -1:欧拉恒等式
  • ((#expr:e^(((-1)^0.5) * pi))) = NAN:对比使用普通运算功能的欧拉恒等式

详细运算子、函数、常数说明[编辑]

表达式 参数 运算子 PHP 资料型态 优先级 范例
- 1 一元 - 符号 (负号) - 与参数相同 10
((#expr:-12)) -12
((#expr:-trunc12)) -12
((#expr:-trunc(-2^63))) 9.2233720368548E+18
e
(位于子表达式之间)
2 *10^
以10为底的指数
科学记号
* pow (10,..) 浮点数,除非左边的参数是整数且指数是非负整数 10
((#expr:2e3)) 2000
((#expr:-2.3e-4)) -0.00023
((#expr:(trunc2)e(trunc-3))) 0.002
((#expr:(trunc2)e(trunc0))) 2
((#expr:(trunc2)e(trunc18))) 2000000000000000000
((#expr:(trunc2)e(trunc19))) 2.0E+19
((#expr:6e(5-2)e-2)) 60
((#expr:1e.5)) 3.1622776601684

错误范例:

((#expr:e4)) 表达式错误:预期外的数字。
exp 1 自然指数函数 ex exp 浮点数 9
((#expr:exp43)) 4.7278394682293E+18
((#expr:exp trunc0)) 1
((#expr:exp709)) 8.218407461555E+307
((#expr:exp-744)) 9.8813129168249E-324

比较:

((#expr:e^43)) 4.7278394682293E+18
((#expr:trunc exp43)) 4727839468229346304
ln 1 自然对数 log 浮点数 9
((#expr:ln2)) 0.69314718055995
((#expr:ln trunc1)) 0
((#expr:ln8.9e307)) 709.07967482591
((#expr:ln.5e-323)) -744.44007192138

可用换底公式转换为常用对数,例如 log 2 ≒ 0.3010:

((#expr:ln2/ln10)) 0.30102999566398
abs 1 绝对值 abs 同于输入值,并且非负 9
((#expr:abs-2)) 2
((#expr:abs trunc-2)) 2
((#expr:abs trunc-2^63)) 9.2233720368548E+18
sqrt 1 平方根 sqrt 浮点数 9
((#expr:sqrt 4)) 2
((#expr:sqrt 2)) 1.4142135623731
((#expr:sqrt 1e19)) 3162277660.1684

此平方根计算无法处理结果为虚数复数的情况,
计负值的平方根会出错:

((#expr:sqrt-1)) sqrt内:结果不是数字。
trunc 1 截尾函数 (int), 即转换型态整数 整数 9
((#expr:trunc1.2)) 1
((#expr:trunc1.8)) 1
((#expr:trunc-1.2)) -1
((#expr:trunc(-2^64+1e5))) 98304
((#expr:trunc(-2^63+1e5))) -9223372036854675456
((#expr:trunc(2^63))) -9223372036854775808
((#expr:trunc(2^63+1e5))) -9223372036854675456
((#expr:trunc(2^64+1e5))) 98304
floor 1 向下取整函数 floor 浮点数 9
((#expr:floor1.2)) 1
((#expr:floor-1.2)) -2
((#expr:floor trunc3)) 3
ceil 1 向上取整函数 ceil 浮点数 9
((#expr:ceil1.2)) 2
((#expr:ceil-1.2)) -1
((#expr:ceil trunc3)) 3
sin 1 正弦函数 sin 浮点数 9
((#expr:sin.1)) 0.099833416646828
((#expr:sin trunc1)) 0.8414709848079

若要使用角度(如30°)可表达为:

((#expr:sin(30*pi/180))) 0.5
cos 1 余弦函数 cos 浮点数 9
((#expr:cos.1)) 0.99500416527803
((#expr:cos trunc1)) 0.54030230586814
tan 1 正切函数 tan 浮点数 9
((#expr:tan.1)) 0.10033467208545
((#expr:tan trunc1)) 1.5574077246549
asin 1 反正弦 asin 浮点数 9
((#expr:asin.1)) 0.10016742116156
((#expr:asin trunc1)) 1.5707963267949
acos 1 反余弦 acos 浮点数 9
((#expr:acos.1)) 1.4706289056333
((#expr:acos trunc1)) 0
((#expr:2*acos 0)) 3.1415926535898
atan 1 反正切 atan 浮点数 9
((#expr:atan.1)) 0.099668652491162
((#expr:atan trunc1)) 0.78539816339745
((#expr:4*atan 1)) 3.1415926535898
not 1 逻辑非 ! 以整数表达
布林值
(1 或 0)
9
((#expr:not0)) 1
((#expr:not1)) 0
((#expr:not2)) 0
((#expr:not trunc1)) 0
^ 2 指数 pow 原则上为浮点数。若底数为整数且指数为非负整数则为整数 8
((#expr:2^3)) 8
((#expr:-2^3)) -8
((#expr:-2^4)) 16
((#expr:(trunc2)^(trunc-3))) 0.125
((#expr:(trunc2)^(trunc0))) 1
((#expr:(trunc2)^(trunc62))) 4611686018427387904
((#expr:(trunc2)^(trunc63))) 9.2233720368548E+18
((#expr:(-2)^1.2)) NAN
((#expr:(-2)^.5)) NAN
* 2 乘法 * 若两参数为整数,则为整数,否则为浮点数 7
((#expr:2*3)) 6
((#expr:(trunc2)*3)) 6
((#expr:2*trunc3)) 6
((#expr:(trunc2)*trunc3)) 6
((#expr:(trunc1e10)*trunc1e9)) 1.0E+19
/ (或写作div 2 除法
(div非整数除法[1])
/ 原则上为浮点数。若两参数皆为整数且整除则为整数 7
((#expr:6/3)) 2
((#expr:(trunc6)/3)) 2
((#expr:2/trunc6)) 0.33333333333333
((#expr:(trunc6)/trunc3)) 2
((#expr:(trunc6)/trunc4)) 1.5
mod 2 模除。 实行带余除法
时会将前后两数截
成整数。[1]
% 整数 7
((#expr:30mod7)) 2
((#expr:-30mod7)) -2
((#expr:30mod-7)) 2
((#expr:-30mod-7)) -2
((#expr:30.5mod7.9)) 2

部分除数无法取余数 (见限制章节):

((#expr:123mod2^64)) 除以零。
fmod 2 模除,浮点数版本。
返回减去第二参数之整数
倍的第一参数。
fmod 浮点数 7
((#expr:5.7fmod1.3)) 0.5
((#expr:99.9fmod60)) 39.9
((#expr:2.99fmod1)) 0.99
((#expr:-2.99fmod1)) -0.99
((#expr:2.99fmod-1)) 0.99
((#expr:-2.99fmod-1)) -0.99
+ 2 加法 + 若两参数皆为整数则为整数,其余浮点数 6
((#expr:2+3)) 5
((#expr:(trunc2)+3)) 5
((#expr:2+trunc3)) 5
((#expr:(trunc2)+trunc3)) 5
((#expr:(trunc7e18)+trunc4e18)) 1.1E+19
- 2 减法 - 若两参数皆为整数则为整数,其余浮点数 6
((#expr:3-2)) 1
((#expr:(trunc3)-2)) 1
((#expr:2-trunc2)) 0
((#expr:(trunc3)-trunc2)) 1
((#expr:(trunc-7e18)-trunc4e18)) -1.1E+19
round 2 将指定的小数位数
四舍五入,若为
负值则会对指数
为数做四舍五入。
round 浮点数 5
((#expr:9.876round2)) 9.88
((#expr:(trunc1234)round trunc-2)) 1200
((#expr:4.5round0)) 5
((#expr:-4.5round0)) -5
((#expr:46.857round1.8)) 46.9
((#expr:46.857round-1.8)) 50
= 2 相等(数字或逻辑的
相等运算,不支援
字串比对)
== 以整数表达
布林值
(1 或 0)
4
((#expr:3.0=3)) 1
((#expr:3.1=3)) 0
((#expr:3.0=trunc3)) 1
((#expr:3.1=trunc3)) 0
((#expr:1e16=trunc(1e16))) 1
((#expr:1e16=trunc(1e16)+trunc1)) 1
((#expr:trunc(1e16)=trunc(1e16)+trunc1)) 0

错误用法:

((#expr:a=a)) 表达式错误:无法识别词语“a”。
< 2 小于(不适用于字串
比较)
< 以整数表达
布林值
(1 或 0)
4
((#expr:3<3)) 0
((#expr:3<4)) 1
((#expr:2.9<3)) 1
((#expr:3.0<3)) 0
((#expr:2.9<trunc3)) 1
((#expr:3.0<trunc3)) 0
((#expr:1e16<trunc(1e16)+trunc1)) 0

wrong:

((#expr:a<b)) 表达式错误:无法识别词语“a”。
> 2 大于(当参数颠倒时
与 < 相同)
> 以整数表达
布林值
(1 或 0)
4
((#expr:4>3)) 1
((#expr:3>3)) 0
<= 2 小于等于(当参数
颠倒时与 >= 相同)
<= 以整数表达
布林值
(1 或 0)
4
((#expr:3<=4)) 1
((#expr:3<=3)) 1
>= 2 大于等于(<的否定) >= 以整数表达
布林值
(1 或 0)
4
((#expr:4>=3)) 1
((#expr:3>=3)) 1
and 2 逻辑与 && 以整数表达
布林值
(1 或 0)
3
((#expr:3and4)) 1
((#expr:-3and0)) 0
((#expr:0and4)) 0
((#expr:0and0)) 0
or 2 逻辑或 || 以整数表达
布林值
(1 或 0)
2
((#expr:3or4)) 1
((#expr:-3or0)) 1
((#expr:0or4)) 1
((#expr:0or0)) 0
+ 1 一元 + 符号 (正号) (不适用) 与参数相同 不适用
((#expr:+1)) 1
((#expr:+-1)) -1
((#expr:+trunc1)) 1
(数字) 0 普通十进制的无符号
数字(一元加e
被视为运算符,请
参见本表的其他地方)
floatval 浮点数 不适用
((#expr:1234567890123456789)) 1.2345678901235E+18
((#expr:123456789.0123456789)) 123456789.01235
e作为
子表达式
0 数学常数e exp(1) 浮点数 不适用
((#expr:e)) 2.718281828459
pi 0 数学常数圆周率 π pi 浮点数 不适用
((#expr:pi)) 3.1415926535898

错误[编辑]

此函数检查错误并给出信息。

  • Expression error: stack exhausted:表达式太长,栈耗尽;
  • Expression error: unexpected number:不可预期的数字;
  • Expression error: unexpected preg_match failure:运算符匹配失败;
  • Expression error: unrecognised word "$1":不可识别的运算符;
  • Expression error: unexpected $1 operator:不可预期的运算符;
  • Expression error: Missing operand for $1:缺少运算数;
  • Expression error: unexpected closing bracket:不可预料的“)”
  • Expression error: unrecognised punctuation character "$1":不可识别的标点字符;
  • Expression error: unclosed bracket:缺少“)”
  • Division by zero:零除错误;
  • In sqrt: Result is not a number:计算结果为虚数。
  • Invalid argument for "$1": "$2":超出"$1"的定义域。

错误的样例

  • ((#expr: ---...---1))(110个“-”) = 表达式错误:堆栈耗尽。
  • ((#expr: ( ) 1)) = 表达式错误:预期外的数字。
  • ((#expr: 2 d 1)) = 表达式错误:无法识别词语“d”。
  • ((#expr: * 1)) = 表达式错误:预期外的*运算符。
  • ((#expr: -)) = 表达式错误:缺少-的操作数。
  • ((#expr: ( 1 ) ))) = 表达式错误:预期外的反括号。
  • ((#expr: 壹)) = 表达式错误:无法识别标点符号“壹”。
  • ((#expr: ( 1)) = 表达式错误:未封闭的括号。
  • ((#expr: 1 / 0)) = 除以零。
  • ((#expr:sqrt-1)) = sqrt内:结果不是数字。
  • ((#expr:ln0)) = ln的参数无效:小于或等于0。
  • ((#expr:asin-22)) = asin的参数无效:小于-1或大于1。

误差[编辑]

浮点误差有可能造成某些运算的结果不可预料,特别是最后几位数不精确。使用此函数运算实数时,注意不要比较运算。

注意内部数字表示[编辑]

  • ((#expr: 100000000000000000)) = 1.0E+17
  • ((#expr: ((#expr: 100000000000000000)))) = 1.0E+17
  • ((#expr: (-1.5-0.5 round 0)+2)) = 0
  • ((#expr: -0.1 round 0)) = -0
  • ((#expr: 2017.5000 round 3)) = 2017.5:使用时会有无法补零的情形。欲补零,可以使用((Round))模板来解决

在返回值中,有可能出现无法再计算的数的情况,或者有一部分有效数字没有显示出来。使用此函数运算时须注意这些问题。

参见[编辑]

  1. ^ 1.0 1.1 div and mod are different from all programming languages, see phab:T8068
{{bottomLinkPreText}} {{bottomLinkText}}
帮助:计算
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?