Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/03/2013, 03:38
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 5 meses
Puntos: 0
Problema para realizar una operacion resta.

Tengo una variable $percepciontotal que es un valor numerico aleatorio.
Tengo otra variable $smi que es un valor numerico constante siempre es menor o igual a $percepciontotal.
El problema consiste en que tengo que restar $percepciontotal-$smi como maximo hasta 6 veces siempre que el resultado final no sea menor a 0.
Para esto he resuelto este conjunto de variables:
A $percepciontotal le resto $smi el resultado lo guardo en la variable $diferencia1 y asi sucesivamente hasta seis veces.
Posteriormente las imprimo en pantalla.

$diferencia1 = $percepciontotal-$smi;
$diferencia2 = $diferencia1-$smi;
$diferencia3 = $diferencia2-$smi;
$diferencia4 = $diferencia3-$smi;
$diferencia5 = $diferencia4-$smi;
$diferencia6 = $diferencia5-$smi;
//escribo los resultados
echo $diferencia1;
echo '. <br>';
echo $diferencia2;
echo '. <br>';
echo $diferencia3;
echo '. <br>';
echo $diferencia4;
echo '. <br>';
echo $diferencia5;
echo '. <br>';
echo $diferencia6;
//salto de linea tres espacios
echo '. <br><br><br>';
//Le resto la diferencia a la percepcion total que me vuelve a dar la variable $smi siempre que el resultado sea positivo, porque si el resultado es negativo no quiero seguir restando este resultado y lo guardo en la variable percepciontotal1....que luego voy a sacarle un tanto por ciento.
$percepciontotal1 = $percepciontotal-$diferencia1;
$percepciontotal2 = $diferencia1-$diferencia2;
$percepciontotal3 = $diferencia2-$diferencia3;
$percepciontotal4 = $diferencia3-$diferencia4;
$percepciontotal5 = $diferencia4-$diferencia5;
$percepciontotal6 = $diferencia5;
//escribo los resultados
echo $percepciontotal1;
echo '. <br>';
echo $percepciontotal2;
echo '. <br>';
echo $percepciontotal3;
echo '. <br>';
echo $percepciontotal4;
echo '. <br>';
echo $percepciontotal5;
echo '. <br>';
echo $percepciontotal6;

//salto de linea tres espacios
echo '. <br><br><br>';
//retencion aplicable por tramos tanto por ciento a la variable obtenida anteriormente. La variable retencion 1..... va a ser siempre $smi excepto cuando su resta sea menor a cero que tiene que ser el resultado de la resta en positivo.(en el ejemplo se ve mejor)
$retencion1 = $percepciontotal1*0;
$retencion2 = $percepciontotal2*0.3;
$retencion3 = $percepciontotal3*0.5;
$retencion4 = $percepciontotal4*0.6;
$retencion5 = $percepciontotal5*0.75;
$retencion6 = $percepciontotal6*0.9;
echo $retencion1;
echo '. <br>';
echo $retencion2;
echo '. <br>';
echo $retencion3;
echo '. <br>';
echo $retencion4;
echo '. <br>';
echo $retencion5;
echo '. <br>';
echo $retencion6;

El caso es que funciona correctamente siempre que sean números grandes 6000 8000.....
Pongo un ejemplo:
$percepciontotal = 6000
$smi= 500

6050 500 5550
5550 500 5050
5050 500 4550
4550 500 4050
4050 500 3550
3550 500 3050

Pongo un ejemplo:
$percepciontotal = 700
$smi= 500
el problema es que con números pequeños no me funciona
700 500 200
200 500 -300 este resutado deberia ser 200
-300 500 -700 este resultado deberia ser 0
-700 500 -1200 este resultado deberia ser 0

Mi pregunta es esta, ¿cómo puedo hacer esto para que en el resultado 200-500 me reste solo los 200 y a partir de ahi el resto sea cero?
Creo que debería ser algo así restar y guardar en una variable mientras el número sea positivo pero yo no se como se puede hacer esto.