2010-02-12 15 views
8

Como todos sabemos, la aritmética de punto flotante no siempre es completamente precisa, pero ¿cómo se manejan sus inconsistencias?Cómo lidiar con el extraño redondeo de flotantes en PHP

A modo de ejemplo, en PHP 5.2.9: (esto no sucede en 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 

¿Cómo usted evitar esto?

Respuesta

4

¿cómo lidiar con sus inconsistencias?

  • Para la materia donde los resultados exactos basan en cuestiones de representación decimales (es decir, dinero), no utilizan IEEE754 flota, se utilizan bibliotecas "bignum" como BCMath
  • Para la materia en la que sólo necesita sus cálculos para ser relativamente preciso (como la mayoría de los cálculos científicos), utiliza los algoritmos numerically stable para que las incoherencias permanezcan en los bits menos significativos (donde no importan).