Foros del Web » Programando para Internet » PHP »

Simple IF conflicto con valores decimales.

Estas en el tema de Simple IF conflicto con valores decimales. en el foro de PHP en Foros del Web. Hola chicos, la verdad no se por que lado mirar.... les cuento: Tengo un FORM simple el cual llena: alia* <= Codigo de barra o ...
  #1 (permalink)  
Antiguo 25/10/2011, 07:52
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 9 meses
Puntos: 89
Simple IF conflicto con valores decimales.

Hola chicos, la verdad no se por que lado mirar....
les cuento:

Tengo un FORM simple el cual llena:

alia* <= Codigo de barra o Alias del articulo.
cantidad* <= Cantidad de articulos a comprar.
descripcion* <= Descripcion del articulo.
precio* <= Precio de venta/unidad.
sub* <= Sub Total cantidad* por precio*.

Estos campos se pueden agregar cuantos uno necesite:

alia1-alia2-alia3-alia4-ali5.... etc.

Por Javascrip calculo el valor de sub* multiplicando cantidad* por precio*.

El usuario solo puede modificar el alia* o la cantidad* el resto es READONLY.

Luego envio por metodo POST a un archivo.php para validar.

PROBLEMA:

Si el articulo vale 1.19 y algunas compras las guarda como ERROR.

Código PHP:
}elseif( $sub_total != $sub )// MODIFICARON LA CANTIDAD DE ARTICULOS. 
Algunas pruebas:
1.19*1=1.19 OK
2-4 OK
1.19*5=5.95 ERROR
6-8 OK
1.19*9=10.71 ERROR
1.19*25=29.75 OK
1.19*66=78.54 ERROR
1.19*71=84.49 OK
1.19*150=178.50 OK

La funcion Javascript que calcula el sub* es la siguiente:
USO JQUERY
Código Javascript:
Ver original
  1. function calcule(valor)
  2. {
  3.     var cantidad = parseFloat($('#cantidad'+valor).val());
  4.     var precio = parseFloat($('#precio'+valor).val());
  5.     var subtotal    = (precio*cantidad).toFixed(2)
  6.     $('#sub'+valor).val(subtotal);
  7. }
Algunos notaran que dice toFixed(2) eso significa que solo muestra 2 decimales.
Por ejemplo:
1.19*66=78.54 ERROR
Este caso que da error, no es Fixeado. Ya que la multiplicacion da dos decimales.

Aqui el codigo PHP:
Código PHP:
<?php
session_start
();
require(
'../require/config.php');
foreach    (    
$_POST    as    $key    =>    $value    ){$$key    =    $value;}

$rows_correctas    =    array();
$rows_eliminadas    =    array();
$rows_error    =    array();
for(    
$i    =    '1'    ;    $i<=$row    ;$i++    )
{
    
$alia    =    'alia'.$i;
    
$alia    =    $$alia;
    
$cantidad    =    'cantidad'.$i;
    
$cantidad    =    $$cantidad;
    
$descripcion    =    'descripcion'.$i;
    
$descripcion    =    $$descripcion;
    
$precio    =    'precio'.$i;
    
$precio    =    (float)$$precio;
    
$sub    =    'sub'.$i;
    
$sub    =    (float)$$sub;
    
$sub_total $cantidad*$precio;
    
//Estan todos los datos necesarios?
    
if( !empty( $alia ) and !empty( $cantidad ) and !empty( $descripcion ) and !empty( $precio ) and !empty( $sub ) )
    {
        
//BUSCAR PRODUCTO.
        
$SQL_ARTICULO    =    "SELECT    *    FROM    articulos    WHERE    alias = '$alia' OR cb = '$alia'";
        
$QUERY_ARTICULO    =    mysql_query($SQL_ARTICULO)or die( mysql_error());    
        
$ARTICULO    =    mysql_fetch_assoc(    $QUERY_ARTICULO    );
        
        if(    
$ARTICULO['precio_venta'] == NULL)//MODIFICARON EL NUMERO DE ARTICULO A UNO INEXISTENTE.
        
{
            
$rows_error    $alia.';'.$cantidad.';'.$descripcion.';'.$precio.';'.$sub.';'.$i.'; CONFLICTO El articulo no existe.';
        }elseif(    
$precio    !=    $ARTICULO['precio_venta'])//MODIFICARON EL NUMERO DE ARTICULO POR OTRO.
        
{
            
$rows_error    $alia.';'.$cantidad.';'.$descripcion.';'.$precio.';'.$sub.';'.$i.'; CONFLICTO El valor: precio de venta no coinciden con el valor del articulo.';
        }elseif( 
$sub_total != $sub )// MODIFICARON LA CANTIDAD DE ARTICULOS.
        
{
            
$rows_error    $alia.';'.$cantidad.';'.$descripcion.';'.$precio.';'.$sub.';'.$i.'; CONFLICTO El subtotal no concuerda con el precio de venta por cantidad';        
        }else{
            
$rows_correctas    $alia.';'.$cantidad.';'.$descripcion.';'.$precio.';'.$sub.';'.$i.'; Todo OK';
        }
    }else{
        
$rows_eliminadas[] =    $alia.';'.$cantidad.';'.$descripcion.';'.$precio.';'.$sub.';'.$i;
    }
}
echo 
"Error:<br>";
print_r($rows_error);
echo 
"<br>";
echo 
"Eliminadas <br>";
print_r($rows_eliminadas);
echo 
"<br>";
echo 
"Correctas: <br>";
print_r($rows_correctas);
?>
__________________
Mono programando!
twitter.com/eguimariano
  #2 (permalink)  
Antiguo 25/10/2011, 09:34
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 9 meses
Puntos: 89
....

Modifique esto:

Código PHP:

// 1.19 * 66
    
$precio    =    'precio'.$i;
    
$precio    =    $$precio;
    
$precio    =    (float)$precio;
    
$sub    =    'sub'.$i;
    
$sub    =    $$sub;
    
$sub    =    (float)$sub;
    
$sub_total $cantidad*$precio;
    
$sub_total =(float)$sub_total;
     if(
is_float($sub))
    {
    echo 
$sub." es float <br>";
    }else{
    echo 
$sub." no es float <br>";
    }
         if(
is_float($sub_total))
    {
    echo 
$sub_total." es float <br>";
    }else{
    echo 
$sub_total." no es float <br>";
    } 
Pero sin efecto la respuesta es:

78.54 es float
78.54 es float
__________________
Mono programando!
twitter.com/eguimariano

Última edición por SirDuque; 25/10/2011 a las 09:38 Razón: me equiboque

Etiquetas: conflicto, mysql, simple, sql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:24.