Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/10/2011, 07:52
Avatar de SirDuque
SirDuque
 
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 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