Comunidad oficial de diseñadores web, web developers y Webmasters. Aqui podemos tratar temas actuales sobre diseño y tecnología. Podemos compartir y actualizarnos. Photoshop, Flash, PHP, ASP, Java, HTML, CSS, MySQL, CMS, etc. Unite YA y lee los Sticky
Ver más- 13,065 Miembros
- 9,531 Temas
- 3,449 Seguidores
[Ayuda] Comparar decimales PHP
Leo un csv y cuento cantidad de saltos de lineas y cantidad total de la suma de una columna:
<? if (($handle = fopen($nombre, 'r')) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ';')) !== FALSE)
{
$totalfilas++;
$costo_seg = str_replace(',','.',$data[2]);
$mitotal +=$costo_seg;
}
} ?>
Hasta aca va todo bien, el problema es en la comparación:
<? if ($totalfilas == $uscasos and $mitotal == $costos) ?>
En esta condición primero compara cant. de filas que se leyó con la cantidad de filas que ingresa el usuario (funciona) pero después la otra comparación cuando el numero es ej 12 154 66 (enteros) funciona pero cuando es por ej 15.5 654.45 54.22 (decimales) no se cumple nunca la condición no se porque.
Si alguno puede darme una mano.
- 0Calificación
- 0Seguidores
- 94Visitas
- 0Favoritos
Global
Argentina
Chile
Colombia
España
México
Perú
Uruguay
Venezuela
5 respuestas
Matemáticamente 15.1 no es igual a 15 ... si realmente no importan esos decimales de sobra, podes redondear un decimal a su numero entero más cercano, hacia arriba o hacia abajo.
floor() , round() y ceil() usa la conveniente.
Los leo de un ecxel que siempre ponen los valores con 2 decimales osea 45.01 56.58 por ejemplo. Yo antes de la comparación los muestro en pantalla y me da por ejemplo 15689.5 y 15689.5 (osea los imprime iguales) y inmediatamente después de eso los comparo pero no funca :S
imprimilos con var_dump() para saber que tipo de datos son exactamente
float(1308836.5)
string(1) "1"
me tira esto pero en la comparación si el numero es entero funciona.
Tenes que usar esta función http://php.net/manual/es/function.bccomp.php , por que los float pierden precisión cuando los comparas o sumas (lo leí hace un tiempo en un foro, no recuerdo cual)