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

Help:计算

维基百科使用手册

借助于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}}
Help:计算
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?