Razširitev MediaWiki ParserFunctions omogoča uporabnikom preprosto matematično izračunavanje.

Funkcija expr razčleni matematične izraze in tudi logične (boolean) izraze s števili in booleani (z nizi ne). Skladnja je:

{{ #expr: izraz }}

Presledki niso nujni. Znotraj števil presledki niso dovoljeni.

Podprti operatorji (približno po vrstnem redu prednosti) so not, *, /, div, mod, +, -, round, =, <>, !=, <=, >=, and in or.

OperatorjiEdit

Operator Operacija Zgled
none "{{#expr: 123456789012345|=}}" gives "1.2345678901234E+14" [1]
"{{#expr: 0.000001|=}}" gives "1.0E-6" [2]
+ Unarni znak + "{{#expr: +30 * +7|=}}" gives "210" [3]
- Unarni znak - (negacija) "{{#expr: -30 * -7|=}}" gives "210" [4]
not Unarni NOT, logični NOT "{{#expr: not 0 * 7|=}}" gives "7" [5]
"{{#expr: not 30 +7|=}}" gives "7" [6]
* Množenje "{{#expr: 30*7|=}}" gives "210" [7]
/ Deljenje, enako kot div "{{#expr: 30/7|=}}" gives "4.2857142857143" [8]
div Deljenje, enako kot /,
ne omogoča deljenja celih števil
"{{#expr: 30 div 7|=}}" gives "4.2857142857143" [9] (moralo bi biti 4)
"{{#expr: 5 div 2 * 2 + 5 mod 2|=}}" gives "6" [10] (moralo bi biti 5)
mod »Modulo«, ostanek po celoštevilčnem deljenju.

Pozor, div in mod sta drugačna kot pri programskih jezikih. To je bilo popravljeno, vendar še ni v uporabi. Glej bugzilla:6068.
"{{#expr: 30 mod 7|=}}" gives "2" [11]
"{{#expr: -8 mod -3|=}}" gives "-2" [12]
"{{#expr: -8 mod +3|=}}" gives "-2" [13]
"{{#expr: 8 mod 2.7|=}}" gives "0" [14] (moralo bi biti 2.6)
"{{#expr: 8 mod 3.2|=}}" gives "2" [15] (moralo bi biti 1.6)
"{{#expr: 8.9 mod 3|=}}" gives "2" [16] (moralo bi biti 2.9)
+ Seštevanje "{{#expr: 30+7|=}}" gives "37" [17]
- Odštevanje "{{#expr: 30-7|=}}" gives "23" [18]
round Zaokroži število na levi na potenco 1/10, vpisano na desni "{{#expr: 30/7 round 3|=}}" gives "4.286" [19]
"{{#expr: 30/7 round 0|=}}" gives "4" [20]
{{ #expr: 3456 round -2}} = 3500
= Enako (numerično in logično) "{{#expr: 30 = 7|=}}" gives "0" [21]
<> Neenako, enako kot != "{{#expr: 30 <> 7|=}}" gives "1" [22]
!= Neenako, enako kot <>, logični xor "{{#expr: 1 != 0|=}}" gives "1" [23]
< Manjše kot "{{#expr: 30 < 7|=}}" gives "0" [24]
> Večje kot "{{#expr: 30 > 7|=}}" gives "1" [25]
<= Manjše ali enako "{{#expr: 30 <= 7|=}}" gives "0" [26]
>= Večje ali enako "{{#expr: 30 >= 7|=}}" gives "1" [27]
and Logični AND "{{#expr: 4<5 and 4 mod 2|=}}" gives "0" [28]
or Logični OR "{{#expr: 4<5 or 4 mod 2|=}}" gives "1" [29]

Booleanovi operatorji obravnavajo 0 kot vrednost false (neresnično), vsa druga števila pa kot true (resnično). Vmesni ali končni rezultat true je enak 1. Zgled: "{{#expr: (2 < 3) + 1|=}}" gives "2" [30].

Prednost:

  • "{{#expr: 2 - 3 + 4 / 5 * 6|=}}" gives "3.8" [31]

(+ in - sta si po prednosti enakovredna, prav tako * in /, ki imata prednost pred prvima dvema).

  • "{{#expr: 2 = 5 < 3 + 4|=}}" gives "1" [32]

(najprej +, nato =, nato <).

  • {{#expr:1.234 + 1.234 round 1 + 1}} gives 2.47 [33]

(najprej sešteje, nato zaokroži)

  • {{#expr:3 * 4 mod 10 * 10}} gives 20 [34]

(mod in množenje sta si po prednosti enakovredna, razčlemba poteka z leve na desno)

Prednosti lahko spremenite z oklepaji: "{{#expr: (2 + 3) * 4|=}}" gives "20" [35]

Presledki povečajo berljivost, za pravilno delovanje pa niso nujni, razen med not in sosednjim operatorjem and/div/mod/not/or/round, in med števili niso dovoljeni:

  • {{#expr:7mod3}} gives 1 [36]
  • {{#expr:7.5round0}} gives 8 [37]
  • {{#expr:0and1}} gives 0 [38]
  • {{#expr:0or not0}} gives 1 [39]
  • {{#expr:0ornot0}} gives Expression error: Unrecognized word "ornot". [40]
  • {{#expr:123 456}} gives Expression error: Unexpected number. [41]
  • {{#expr:not not3}} gives 1 [42]
  • {{#expr:notnot3}} gives Expression error: Unrecognized word "notnot". [43]
  • {{#expr:---2}} gives -2 [44]
  • {{#expr:-+-2}} gives 2 [45]
  • {{#expr:2*-3}} gives -6 [46]
  • {{#expr:-not-not-not0}} gives -1 [47]
  • {{#expr:2*/3}} gives Expression error: Unexpected / operator. [48]

Številke kot vnosEdit

Vodilne ničle in sledeča decimalna vejica (za celo število), kot tudi sledeči ničle v številki z decimalno vejico, so dovoljeni.

  • {{#expr: +01.20}} gives 1.2 [49]
  • {{#expr: 12.}} gives 12 [50]

Te enakovrednosti veljajo tudi za #ifeq in #switch, opisana spodaj.

Znanstvena notacija in operatorji grupiranja v vnosu za izraze niso sprejeti:

  • {{#expr: 2E-05}} gives 2.0E-5 [51].
  • {{#expr:{{#expr:2/100000}}}} gives 2.0E-5.
  • {{#expr: 123,456}} gives Expression error: Unrecognized punctuation character ",". [52]

Z določevalcem R (»raw«) vrnejo {{NUMBEROFARTICLES:R}} gives 90791 [53] itd. številke brez separatorjev, kar lahko uporabimo pri izračunavanju.

Števila kot izložekEdit

Neceloštevilčni rezultat vsebuje decimalno vejico (ali piko, odvisno od krajevne prilagoditve). Števila z absolutno vrednostjo pod 1E-4 in z absolutno vrednostjo enako ali nad 1E+12 so zapisana z znanstveno notacijo. Dobljena števila tako vključujejo:

  • "{{#expr: -1234567890*10|=}}" gives "-12345678900" [54]
  • "{{#expr: +1234567890*100|=}}" gives "123456789000" [55]
  • "{{#expr: -1234567890*1000|=}}" gives "-1234567890000" [56]
  • "{{#expr: +1234567890*10000|=}}" gives "12345678900000" [57]
  • "{{#expr: -0.1234567890/100|=}}" gives "-0.00123456789" [58]
  • "{{#expr: +0.1234567890/1000|=}}" gives "0.000123456789" [59]
  • "{{#expr: -0.1234567890/10000|=}}" gives "-1.23456789E-5" [60]
  • "{{#expr: +0.1234567890/100000|=}}" gives "1.23456789E-6" [61]

Ker znanstvena notacija kot vnos ni sprejeta, lahko je lahko uporaba z gnezdenjem v primerih, kjer isto sestavljeno računanje z #expr deluje, neuspešna.

Tako:
"{{#expr: 1/10000 *2|=}}" gives "0.0002" [62],
{{#expr:{{#expr: 1/10000}} *2}} gives 0.0002,
"{{#expr: 1/100000 *2|=}}" gives "2.0E-5" [63], vendar
{{#expr:{{#expr: 1/100000}} *2}} gives 2.0E-5.
Enake težave se lahko pojavijo pri uporabi dolgih časovnih žigov YYYYMMDDhhmmss:
{{CURRENTTIMESTAMP}} gives 20200223115304 [64],
{{#expr:{{CURRENTTIMESTAMP}}}} gives 20200223115304.
Časovni žigi brez sekund imajo 12 števk, kar je ravno zadosti kratko:
{{#expr:20200223115304/100}} gives 202002231153.04 [65]

Za pridobitev izložka velikih celih števil v ne-znanstveni notaciji, primerni za vnos v drug račun, glej Template:evalint (pogovor, povratne povezave, uredi). Za števila z vejicami kot separatorji grupiranja glej Template:csn (pogovor, povratne povezave, uredi).

Kadar je rezultat zaokroževanja negativnega števila negativen, je rezultat "-0". Temu se izognete tako, da izraz x zamenjate z 0 + ( x ):

  • "{{#expr: ( -0.2 round 0 )|=}}" gives "-0" [66]
  • "{{#expr: 1*(-0.2 round 0)|=}}" gives "-0" [67]
  • "{{#expr: 0+(-0.2 round 0)|=}}" gives "0" [68]

TočnostEdit

Točnost rezultata #expr je manjša od točnosti, ki se uporablja interno v izračunavanju izraza:

  • {{#expr:(2/3)}} gives 0.66666666666667 [69]
  • {{#expr:(2/3)*1000000-666666}} gives 0.66666666662786 [70]
  • {{#expr:{{#expr:(2/3)}} *1000000-666666}} gives 0.66666667000391
  • {{#expr:1234567890.1234567890-1234567890}} gives 0.12345671653748 [71] (zaključek: uporabljenih je 16 ali 17 števk številke 1234567890.1234567890)
  • {{#expr:1234567890.1234567890}} gives 1234567890.1235 [72] (rezultat je zaokrožen na vsega 12 števk)
  • {{#expr:({{#expr:1234567890.1234567890}} -1234567890)}} gives 0.12350010871887
Strojna natančnost ali najmanjši x, pri katerem je 1+x != 1 blizu 0.5^53 + 0.5^106 ali 1.1102230246251566636831481088739149080825883E-16 (glej zgoraj):
"{{#expr:1=1+0.00000000000000011102230246251566636831481088739149080826|=}}" gives "0" [73]
"{{#expr:1=1+0.00000000000000011102230246251566636831481088739149080825|=}}" gives "1" [74]
To je za 64=1+52+11 bitov (52 mantissa, 11 eksponent) normalno. Kot razloženo, to ni povezano z najmanjšim rezultatom izraza, večjim od 1:
"{{#expr:1+0.000000000004999889392|=}}" gives "1.000000000005" [75]
"{{#expr:1+0.000000000004999889391|=}}" gives "1.000000000005" [76] pod okrog 1 + 5E-12.

Razvejevanje glede na izrazEdit

Funkcija #ifexpr da enega od dveh določenih rezultatov, kar je odvisno od vrednosti booleanovega izraza s števili in booleani (ne pa nizi). Zgled:

{{#ifexpr: {{CURRENTDOW}} = 0 or {{CURRENTDOW}} = 6 | weekend | Mo-Fr}} yields konec tedna, ker je danes Sunday z {{CURRENTDOW}} gives 0 [77].

PrimerjaveEdit

  1. Enakovrednost števil in nizov lahko ugotavljate s funkcijo #ifeq:.
  2. Posamezen niz lahko z več drugimi primerjate s funkcijo #switch:, ki vrne ustreznega od več določenih rezultatov.
  • "{{#switch:FR|UK=London|FR=Pariz|NL=Amsterdam}}" gives "NL=Amsterdam" [78]
  • "{{#switch:UK|UK|GB=London|FR=Pariz}}" gives "FR=Pariz" [79]
  • "{{#switch:ZZ|UK=London|FR=Paris|nima para}}" gives "nima para" [80]
  • "{{#ifeq:3|3.0|1|0}}" gives "1" [81]
  • "{{#ifeq:3|03|1|0}}" gives "1" [82]
  • "{{#ifeq:0.00003456|3.456E-05|1|0}}" gives "1" [83]
    Vedite, da (v nasprotju z #expr:) #ifeq: kot vnos sprejema tudi eksponencialno notacijo.
  • "{{#ifeq:1234567890123|1234567890120|1|0}}" gives "0" [84]
  • "{{#ifeq:1234567890123|1.23456789012E+12|1|0}}" gives "0" [85]
  • "{{#ifeq:1234567890120|1.23456789012E+12|1|0}}" gives "1" [86]
  • "{{#ifeq:1.234567890120E12|1.23456789012E+12|1|0}}" gives "1" [87]
    Numerične primerjave niso odvisne od oblike izložka. Primerjaj:
  • {{#expr:1234567890123}} gives 1234567890123 [88]
  • {{#expr:1234567890120}} gives 1234567890120 [89]

#ifeq: omogoča primerjavo nizov z enačaji:

#switch: rezultat #ifeq: rezultat
"{{#switch:-1.0|-1=dobro|odpovej}}" gives "odpovej" [90] "{{#ifeq:-1.0|-1|dobro|odpovej}}" gives "dobro" [91]
"{{#switch:a=b|a=b=dobro|odpovej}}" gives "odpovej" [92] "{{#ifeq:a=b|a=b|dobro|odpovej}}" gives "dobro" [93]
"{{#switch:a=c|a=b=odpovej|dobro}}" gives "dobro" [94] "{{#ifeq:a=c|a=b|odpovej|dobro}}" gives "dobro" [95]

Dolžina izrazaEdit

Iskanje absolutne vrednosti numeričnega izraza x, ne da bi uporabili še eno predlogo, vsaj podvoji dolžino izraza:

  • x*(1-2*(x<0))
  • x*{{#ifexpr:x>0|1|-1}}

(Prvi niz ni le krajši, temveč ima tudi to prednost, da je za substitucije potreben en »subst:« ali {{{subst|}}} manj.)

za dolge izraze ne uporabljajte

  • {{#ifexpr:x>0|x|-x}},

saj potroji dolžino.

Podobno za zaokroževanje ali pretvarjanje ne uporabljajte mod, saj podvoji dolžino izraza.

Kdar je rezultat izraza pod 10, podvoji dolžino izraza tudi vodilna ničla:

  • {{#ifexpr:x<10|0}}x

Ta »eksponencialna« rast izrazov z mnogo ponavljanja je posledica pomanjkanja spremenljivk (v smislu programiranja). Do neke mere lahko funkcionalnost spremenljivk dosežemo s predlogami (podrutinami), vendar pa je njihovo pridobivanje iz podatkovne zbirke lahko počasnejše kot razčlemba celo dolgega izraza.

Kadar je število mogočih rezultatov dolgega izraza majhno, omogoča pretvarjanje po želji , vključno z absolutno vrednostjo in izložkom vodilne ničle ipd., ne da bi se izraz ponovil, switch.

Sporočila o napakiEdit

Zgledi za vsa poznana sporočila o napaki #expr: in #ifexpr:
Izraz Sporočilo o napaki
{{#expr:1/0}} gives Expression error: Division by zero [96]
{{#expr:2*}} gives Expression error: Missing operand for *. [97]
{{#expr:1 2}} gives Expression error: Unexpected number. [98]
{{#ifexpr:1*/2}} gives Expression error: Unexpected / operator. [99]
{{#expr: 1 (2)}} gives Expression error: Unexpected ( operator. [100]
{{#expr: (1}} gives Expression error: Unclosed bracket. [101]
{{#expr: 1)}} gives Expression error: Unexpected closing bracket. [102]
{{#expr:2*123,456}} gives Expression error: Unrecognized punctuation character ",". [103]
{{#expr:{{{a}}}}} gives Expression error: Unrecognized punctuation character "{". [104]
{{#ifexpr:3%2}} gives Expression error: Unrecognized punctuation character "%". [105]
{{#ifexpr:abc}} gives Expression error: Unrecognized word "abc". [106]
{{#expr:abc.def}} gives Expression error: Unrecognized word "abc". [107]
{{ #expr:{{ x|102|1000*}} 18 }} da 1.8E+307
{{ #expr:{{ x|102|1000*}} 179 }} gives 1.79E+308
{{ #expr:{{ x|102|1000*}} 180 }} da INF
{{ #expr:{{ x|33|(1+(}} 1 {{ x|33|))}} }} da 34
{{ #expr:{{ x|34|(1+(}} 1 {{ x|34|))}} }} da Expression error: Stack exhausted.
{{#expr:3.4.5.6}} gives 3.4 [108]   (nenamenska nenavadnost)

Opomba: dani niz, tukaj dele izraza, skopira, kakor je določeno (maksimalno 120-krat), predloga Template:x (pogovor, povratne povezave, uredi). Ta stran v drugih projektih dejansko razčleni substituiran izložek kot 102 faktorja »1000« krat »180«, da dobimo INF (neskončnost).

Wikibesedilo brez sporočil o napaki funkcij razčlenjevalnika, vendar navadno z napako ob uporabi ali poskusu uporabe:

{{{#expr:2*3}}}   {{{#expr:2*3}}}   (trojni oklepaj, celota se tolmači kot oznaka parametra z imenom parametra "#expr:2*3")
{{#expr:2*3}}} 6} (en zaklepaj preveč; zadnji izmed treh se tolmači kot golo besedilo, tako ostala koda deluje prav)
{{{#expr:2*3}} {6 (en uklepaj preveč; prvi izmed treh se tolmači kot golo besedilo, tako ostala koda deluje prav)
{{#expr:2*3} {{#expr:2*3} (premalo oklepajev, kot golo besedilo se tolmači vsa koda)
Nedodelano, vendar informativno sporočilo »neprepoznana beseda« lahko dosežemo namenoma. Prikazana je le prva prepoznana napaka:
{{ #expr: 2*{{ #ifexpr: 3*4>10|preveliko|3*4 }} }} da
Expression error: Unrecognized word "preveliko".,
{{ #expr: 2*{{ #ifexpr: 3*4>10|preveč veliko|3*4 }} }} da
Expression error: Unrecognized word "preve"..

Glej tudiEdit


Links to other help pagesEdit

Help contents
Meta · Wikinews · Wikipedia · Wikiquote · Wiktionary · Commons: · Wikidata · MediaWiki · Wikibooks · Wikisource · MediaWiki: Manual · Google
Versions of this help page (for other languages see further)
What links here on Meta or from Meta · Wikipedia · MediaWiki
Reading
Go · Search · Stop words · Namespace · Page name · Section · Backlinks · Redirect · Category · Image page · Special pages · Printable version
Tracking changes
Recent changes (enhanced) | Related changes · Watching pages · Diff · Page history · Edit summary · User contributions · Minor edit · Patrolled edit
Logging in and preferences
Logging in · Preferences · User style
Editing
Starting a new page · Advanced editing · Editing FAQ · Edit toolbar · Export · Import · Shortcuts · Edit conflict · Page size
Referencing
Links · URL · Piped links · Interwiki linking · Footnotes
Style and formatting
Wikitext examples · CSS · Reference card · HTML in wikitext · Formula · List · Table · Sorting · Colors · Images and file uploads
Fixing mistakes
Show preview · Testing · Reverting edits
Advanced functioning
Expansion · Template · Advanced templates · Parser function · Parameter default · Variable · System message · Substitution · Array · Calculation · Embed page
Others
Special characters · Renaming (moving) a page · Preparing a page for translation · Talk page · Signatures · Sandbox · Legal issues for editors