FUNCTION MAIN()
Eloy()
RETURN NIL
FUNCTION Eloy()
local nValor, nPorcentaje
nPorcentaje = 21/100
Calculos( 7, nPorcentaje )
Calculos( 17.37, nPorcentaje )
Calculos( 13.53, nPorcentaje )
Calculos( 17, nPorcentaje )
RETURN NIL
FUNCTION Calculos( nValor, nPorcentaje )
LOCAL nNeto, nIva, nTotal
? "Valor: ", nValor
? "Neto : ", nNeto := CalculoImponible( nValor, nPorcentaje )
? "Iva : ", nIva := DosDecimales( nNeto * nPorcentaje )
? "Total: ", nTotal := nNeto + nIva
? "==========="
RETURN NIL
FUNCTION CalculoImponible( nValor, nPorcentaje )
RETURN AjusteParaIva( ( nValor / ( 1 + nPorcentaje ) ) )
FUNCTION AjusteParaIva( nValor )
RETURN DosDecimales( nValor ) + 0.01
FUNCTION DosDecimales( nTotal )
nTotal = Int ( nTotal * 100 )
nTotal = nTotal / 100
RETURN nTotal
FUNCTION ELOY()
local nTotal, nIva, nNeto
// 1ª opcion cuando queremos calcular el IVA partiendo de un total
nIva := ROUND( ( 8 * 21 / 121 ), 2) // => 1,39
alert ( str( nIVA, 12, 6 ),, "IVA DESDE TOTAL" ) // => 1,39
nNeto := 7 - nIVA // 6,61
ALERT ( STR ( nNeto, 12, 6),,"NETO")
// Hasta aqui todo normal pero al INVERTIR la operación, es cuando uso la función ENTERO()
nIva := ROUND( ENTERO ( nNeto * 0.21), 2 ) => 1,3881 que al pasarlo a la función ENTERO se queda en 1,38 (ya no me sale el 1,39 de antes)
alert (str(nIVA, 12,6 ),,"IVA DESDE NETO")
// 2ª Opcion partiendo del neto de un artículo precio 6,61 calcular el IVA y el total
nIva := ROUND( ( ENTERO (6,61 * 0.21 )), 2) => 1,38
alert ( str(nIVA, 12, 6 ),,"IVA CALCULADO DESDE NETO" )
nTotal :=6,61 + nIVA => 7,99
ALERT ( STR ( nTotal, 12, 6),,"IMPORTE TOTAL")
RETURN nil
SET DECIMALS TO 2
Msginfo( "Valor inicial : "+Str( 8.00, 5,2 ) + CRLF + ;
"Base Imponible: "+Str( Round( 8/1.21 , 2 ) , 5 , 2 ) + CRLF + ;
"IVA : "+Str( Round(Round( 8/1.21 , 2 ) * 0.21,2) , 5 , 2 ) + CRLF + ;
"Total : "+Str( Round( 8/1.21 , 2 )+Round(Round( 8/1.21 , 2 ) * 0.21,2) , 5 , 2 ) ;
)
MSGALERT(XROUND(7/1.21,2)) //// sale 5.790000
MSGALERT(XROUND(8/1.21,2) ) //// sale 6.610000
MSGALERT(XROUND(5.790000*1.21,2)) //// sale 7.010000
MSGALERT(XROUND(6.610000*1.21,2) ) //// sale 8.000000
*********************************
Function xRound( x, y )
Local nDeci := 2
y := 2
nDeci := Set( _SET_DECIMALS, y )
If x >= 0
x := Val( Str( Int( x * 10 ** y + 0.5000001 ) ) ) / 10 ** y
Else
x := Val( Str( Int( x * 10 ** y - 0.5000001 ) ) ) / 10 ** y
Endif
Set( _SET_DECIMALS, nDeci )
Return x
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 13 guests