EVALuate, but No Scientific notation.

Formatul poate fi folosit pentru a evalua o expresie, dacă rezultatul trebuie să poată fi folosit mai departe în alte expresii.

Ce întoarce

modificare

Dacă rezultatul nu este valid, expresia este reprodusă, în paranteze. Altfel formatul întoarce numărul rezultat din evaluarea expresiei specificate.

Formatul are același rezultat cu apelul direct al funcției parser {{#expr: ...}}, cu excepția parantezelor ce apar dacă expresia nu poate fi evaluată, ce înlocuiesc mesajele de eroare generate de {{#expr: ...}}.

  • {{evalns|1 + {{evalns|1234567890*{{{missingparameter}}}*1234567890}}}} are valoarea (1 + (1234567890*{{{missingparameter}}}*1234567890)).
  • {{#expr:1 + {{#expr:1234567890*{{{missingparameter}}}*1234567890}}}} are valoarea Expression error: Unexpected < operator.
  • {{evalns|3*4}} are valoarea 12.
  • {{evalns|1234567890*12}} are valoarea 14814814680.
  • {{evalns|1234567890*1234567890}} are valoarea 1.5241578750191E+18.

Notă: Notația științifică nu mai este o problemă în apelurile ulterioare către {{#expr: ...}}. De aceea acest format nu mai invalidează numerele scrise în această notație. Nu este nici măcar necesară prezența parantezelor datorită ordinii operatiilor, însă acestea au fost păstrate pentru compatibilitate:

  • {{evalns|1 + {{evalns|1234567890*1234567890}}}} are valoarea 1.5241578750191E+18.
  • {{evalns|{{evalns|1234567890*1234567890}} + 1}} are valoarea 1.5241578750191E+18.
  • {{evalns|2 * {{evalns|1234567890*1234567890}}}} are valoarea 3.0483157500382E+18.
  • {{evalns|{{evalns|1234567890*1234567890}} + 1}} are valoarea 3.0483157500382E+18.

Folosirea directă a {{#expr: ...}} produce aceleași rezultate:

  • {{#expr:1 + {{#expr:1234567890*1234567890}}}} are valoarea 1.5241578750191E+18.
  • {{#expr:{{#expr:1234567890*1234567890}} + 1}} are valoarea 1.5241578750191E+18.
  • {{#expr:2 * {{#expr:1234567890*1234567890}}}} are valoarea 3.0483157500382E+18.
  • {{#expr:{{#expr:1234567890*1234567890}} + 1}} are valoarea 3.0483157500382E+18.

Cod sursă

modificare

(simplificat și formatat, fără parametrii de substituire ce există în sursă)

{{#if: {{#ifexpr: {{#expr: {{{1}}} }} }}
 | ({{{1}}})
 | {{#expr: {{{1}}} }}
}}

Acest cod încearcă mai întâi să evalueze expresia, care poate întoarce fie un număr, fie o valoare specială precum INF sau NAN, sau un mesaj de eroare. Apoi #ifexpr evaluează acest șir de caractere: doar numerele vor trece, dar deoarece nu exstă o valoare de return, va fi întors un șir gol de carcatere; dacă există o eroare de evaluare (inclusiv la INF sau NAN), va fi generat doar un mesaj de eroare. În cele din urmă condiția #if testează pentru prezența unui mesaj de eroare. Dacă există unul, parametrul 1 nu a putut fi evaluat la un număr finit, așa că este întors acest parametru între parantezel altfel, parametru este evaluat pentru a îi întoarce valoarea.

Atenție: Dacă expresia din parametrul 1 este un număr, vor fi eliminate zerourile nesemnificative, iar exponenții vor fi normalizați: "{{#expr:1.50}}" = "1.5", "{{#expr:.00001}}" = "1.0E-5". Numerele sunt returnate cu cel mult 13 cifre semnificative, fie ca întregi sau numere fracționale dacă este posibil, folosind notația exponențială normalizată pentru toate numerele mai mici de 0.0001 sau mai mari decât 1 × 1015.