AL+

Limba: RO (română) EN (English)

Scrieți-ne: paul@alplustech.com

Privire înapoi: săptămâna 15–21 ianuarie 2025

Calculele zecimale au în continuare nevoie de reguli de rotunjire

PHP 8.4.3 a corectat cazuri precise din BCMath. Definiți separat scara, rotunjirea, egalitatea numerică și formatul înainte să acceptați un calcul monetar.

Read this article in English

Alegerea aritmeticii zecimale nu stabilește cum trebuie să rotunjească o firmă un calcul. Aplicația are în continuare nevoie de reguli explicite pentru precizia intermediară, momentul rotunjirii și reprezentarea trimisă altui sistem. PHP 8.4.3 oferă un reper istoric util: o bibliotecă poate corecta anumite comportamente numerice, în timp ce regulile de afaceri ale aplicației rămân o responsabilitate separată.

Privind din noiembrie 2026 spre săptămâna de 15 ianuarie 2025, jurnalul PHP datează versiunea 8.4.3 pe 16 ianuarie. Secțiunea BCMath enumeră remedieri pentru compararea lui zero cu zero negativ, păstrarea zerourilor finale în Number::round(), un caz de rotunjire la limita lui zero și calculul scării deîmpărțitului. Sunt remedieri precise, nu dovada că toate calculele monetare în PHP erau greșite.

Separați valoarea de forma scrisă

Două șiruri zecimale pot exprima aceeași valoare numerică și pot avea formate diferite. De exemplu, 12.3 și 12.30 sunt egale numeric, dar interfața destinatară poate cere exact două cifre după separatorul zecimal. Egalitatea și serializarea au deci nevoie de condiții separate de acceptare. O comparație care ignoră zerourile finale nu demonstrează că exportul are forma cerută.

Aceeași diferență apare între zero și zero negativ. Comparația matematică și afișarea aleasă pentru rezultat răspund unor întrebări diferite. Dacă importul unui registru cere o formă normalizată pentru zero, aplicația ar trebui să precizeze cerința. Nu ar trebui să deducă întregul contract din felul în care un obiect este afișat întâmplător după o operație.

Jurnalul din ianuarie face diferențele vizibile, enumerând separat compararea cu zero și păstrarea zerourilor finale. Concluzia pentru produs este că o dependență numerică are mai multe responsabilități observabile. La actualizare, verificați comportamentele folosite efectiv de aplicație, în loc să tratați suportul zecimal ca pe o singură funcționalitate indivizibilă.

Stabiliți unde se pierde precizia

Să luăm o repartizare ilustrativă a unui total pe mai multe poziții. O regulă care rotunjește fiecare poziție înainte de însumare poate produce alt rezultat decât una care însumează valori cu precizie mai mare și rotunjește o singură dată. Instalarea unei biblioteci cu precizie arbitrară nu poate alege regula. Aplicația trebuie să precizeze ce rezultat aparține ieșirii agreate.

Notați reprezentarea intrării, precizia fracționară permisă și regula de rotunjire la limita relevantă. Definiți scara ca numărul cifrelor zecimale după separator în acea etapă. Păstrarea mai multor cifre în calcul și emiterea a două cifre la export sunt alegeri separate. Definiți ce se întâmplă cu restul când totalul trebuie repartizat în unități fixe. Acesta este un exercițiu propus de proiectare, nu consultanță contabilă sau relatarea unui incident financiar. Regula corectă trebuie să provină din cerințele efective ale produsului.

Evitați trecerea intrării zecimale printr-o valoare binară în virgulă mobilă înainte de a o transmite aritmeticii zecimale. Manualul BCMath din PHP, citit ca documentație modificabilă în noiembrie 2026, descrie numere cu precizie arbitrară reprezentate prin șiruri și avertizează asupra transmiterii valorilor float. El explică limita dintre reprezentări; nu este o copie înghețată a fiecărei pagini de manual din ianuarie 2025.

Precizia are și un punct final. Un API, o coloană din baza de date sau un format de export poate limita valoarea după încheierea calculului. Dacă acea limită trunchiază cifre fără să semnaleze schimbarea, aritmetica internă atentă poate să nu păstreze rezultatul dorit. Examinați întregul traseu, de la intrarea acceptată la ieșirea stocată și transmisă, inclusiv conversiile de la fiecare limită.

Actualizați în raport cu așteptări explicite

Pentru o aplicație care folosește operațiile afectate, versiunea sugerează câteva verificări bine delimitate. Includeți o comparație cu zero, o valoare a cărei ieșire cere zerouri finale și o limită de rotunjire relevantă pentru modul ales. Adăugați traseul efectiv de împărțire sau repartizare dacă aplicația depinde de el. Sunt verificări propuse, nu teste efectuate de AL+ pentru acest articol.

Separați rezultatele numerice așteptate de șirurile așteptate. Un test care verifică doar egalitatea valorilor poate rata o cerință de serializare. O comparație exclusiv între șiruri poate respinge un rezultat valid numeric fără să explice dacă diferența contează pentru operația firmei. Fiecare așteptare ar trebui să numească regula pe care o protejează.

Arhiva versiunilor PHP oferă o a doua înregistrare oficială a datei istorice. Intrările din jur continuă să se schimbe. În noiembrie 2026, 8.4.3 este o versiune istorică de remediere, nu o recomandare pentru o instalare nouă. Folosiți un mediu de execuție acceptat și actualizat corespunzător și evaluați aplicația concretă înainte de a accepta actualizarea.

Unitățile monetare minore fixe pot fi mai simple

Cel mai puternic argument împotriva obiectelor zecimale cu precizie arbitrară este că multe produse au nevoie doar de unități monetare minore fixe. Un număr întreg de bani, asociat explicit cu moneda și cu limitele de valori, poate simplifica adunarea și stocarea. Introducerea unei alte abstracții numerice poate adăuga complexitate fără să îmbunătățească operațiile efective ale produsului.

Abordarea are în continuare nevoie de reguli pentru înmulțire, împărțire și repartizare. Un procent sau un preț unitar cu precizie mai mare poate produce un rezultat fracționar înainte să devină un număr întreg de unități minore. Stabiliți unde are loc conversia. Evitați și presupunerea că toate monedele sau cantitățile acceptate au aceeași scară.

Alegeți reprezentarea după operații și interfețe, fără să afirmați că un singur tip numeric face orice calcul monetar sigur. Unitățile fixe pot fi potrivite pentru sume stabilite; reprezentările zecimale pot fi utile când calculul cere precizie mai mare. Combinarea lor poate fi și ea justificată dacă limita conversiei este explicită și inteligibilă.

În dezvoltarea software la comandă, cereți câteva reguli scrise înaintea alegerii bibliotecii: intrarea acceptată, precizia intermediară, momentul rotunjirii, tratarea restului și reprezentarea ieșirii. Folosiți apoi notele versiunilor pentru a identifica ce comportamente ale dependenței cer verificare. Remedierea PHP din ianuarie este o dovadă utilă despre cazuri precise; responsabilul aplicației trebuie în continuare să definească rezultatul corect.