Help:Calculation/sl
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.
Operatorji[uredi]
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 vnos[uredi]
Vodilne ničle in sledeča decimalna vejica (za celo število), kot tudi sledeči ničle v številki z decimalno vejico, so dovoljeni.
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 116398 [53] itd. številke brez separatorjev, kar lahko uporabimo pri izračunavanju.
Števila kot izložek[uredi]
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 20220322093618 [64],- {{
#expr:
{{CURRENTTIMESTAMP
}}}} gives 20220322093618.
- Časovni žigi brez sekund imajo 12 števk, kar je ravno zadosti kratko:
{{#expr:20220322093618/100}}
gives 202203220936.18 [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čnost[uredi]
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 izraz[uredi]
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 Pon-Pet, ker je danes Tuesday z
{{CURRENTDOW}}
gives 2 [77].
Primerjave[uredi]
- Enakovrednost števil in nizov lahko ugotavljate s funkcijo #ifeq:.
- 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 izraza[uredi]
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 napaki[uredi]
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 tudi[uredi]
- m:Pomoč:Funkcije razčlenjevalnika kode
- Help:Modulo and round
- Help:Colon function (splošni opis)
- Help:Substitution
- m:Category:Mathematical templates
- w:sl:Kategorija:Matematične predloge