2010-02-12 7 views
8

Come tutti sappiamo, l'aritmetica in virgola mobile non è sempre completamente accurata, ma come si gestiscono le sue incoerenze?Come gestire lo strano arrotondamento dei float in PHP

A titolo di esempio, in PHP 5.2.9: (questo non avviene in 5,3)

echo round(14.99225, 4); // 14.9923 
echo round(15.99225, 4); // 15.9923 
echo round(16.99225, 4); // 16.9922 ?? 
echo round(17.99225, 4); // 17.9922 ?? 
echo round(25.99225, 4); // 25.9922 ?? 
echo round(26.99225, 4); // 26.9923 

Come ti ovviare a questo?

risposta

4

come affrontare le incongruenze ?

  • Per le cose in cui risultati esatti basino su elementi rappresentazione decimale (cioè soldi), non utilizzare IEEE754 galleggia, si utilizza le librerie "bignum" come BCMath
  • Per le cose in cui hai solo bisogno i vostri calcoli essere relativamente preciso (come la maggior parte dei calcoli scientifici), si utilizzano gli algoritmi numerically stable in modo che le incoerenze rimangano nei bit meno significativi (dove non contano).