/************************************************
Convierte un número a letra
execute sp_ConvertNumberToLetter 91234.78, '',0,1
Ej: 3456 > Tres Mil Cuatrociectos Cincuenta y Seis
*************************************************/
CREATE PROCEDURE sp_ConvertNumberToLetter
@iNumber VARCHAR(20),
@sResult VARCHAR(2000) OUTPUT,
@bUpperCase BIT = 1,
@bForProvider BIT = 0
AS
DECLARE @sNumber AS VARCHAR(13)
DECLARE @iLenght AS TINYINT
DECLARE @iCounter AS TINYINT
DECLARE @iQuota AS TINYINT
DECLARE @sPlus AS VARCHAR(20)
DECLARE @iPosition AS TINYINT
DECLARE @sHundreds AS NVARCHAR(3)
DECLARE @sHundOfThou AS NVARCHAR(3)
DECLARE @sHundOfMill AS NVARCHAR(3)
DECLARE @sHundOfTril AS NVARCHAR(3)
DECLARE @sDecimal AS VARCHAR(2)
DECLARE @sResults1 AS VARCHAR(200)
DECLARE @sResults2 AS VARCHAR(200)
DECLARE @sResults3 AS VARCHAR(200)
DECLARE @sResults4 AS VARCHAR(200)
DECLARE @sSubNumber AS VARCHAR(25)
--Convierte el número en NVarchar
SELECT @sNumber = RTRIM(CAST(@iNumber AS VARCHAR(13)))
--Quita los espacios en Blanco
SET @sNumber = RTRIM ( LTRIM( @sNumber ) )
--Inicia el contador en 1
SET @iCounter = 1
/*Separa la cantidad correspondiente a los centavos (SI EXISTEN)*/
-- SELECT CHARINDEX( '.', @sNumber )
IF CHARINDEX( '.', @sNumber ) <> 0
BEGIN
--Busca el lugar donde se encuentre el punto decimal y a partir del siguiente caracter
--lo convierte en la parte decimal del número
SET @sDecimal = SUBSTRING( @sNumber, CHARINDEX( '.', @sNumber ) + 1 , LEN( @sNumber ) )
-- select @sdecimal, '@sdecimal'
--Desaparece esa parte decimal del número en general
IF RTRIM(@sDecimal) <> ''
BEGIN
SET @sNumber = SUBSTRING( @sNumber, 1, CHARINDEX( '.', @sNumber ) - 1 )
-- select @snumber, '@snumber'
END
END
/*SI NO EXISTEN LOS PONE COMO 00/100*/
ELSE
BEGIN
SET @sDecimal = '00'
END
--Invierte la cadena para obtener los números reales a convertir
SET @sNumber = REVERSE(@sNumber)
-- SELECT @sNumber
--Obtiene su longitud
SET @iLenght = LEN(@sNumber)
--Los separa en cantidades de 3 numeros
WHILE ( @iLenght > 0) AND ( @iCounter <= 4 )
BEGIN
-- SELECT @sNumber , 'aqui toy'
/*Verifica que haya mas de 3 numeros en la cadena*/
IF @iLenght >= 3
BEGIN
SET @iQuota = 3
END
ELSE
BEGIN
SET @iQuota = @iLenght
END
/*Guarda en cada variable la cadena de números repartida*/
IF @iCounter = 1
BEGIN
SET @sHundreds = SUBSTRING( @sNumber, 1 , @iQuota )
SET @sHundreds = REVERSE( @sHundreds )
END
IF @iCounter = 2
BEGIN
SET @sHundOfThou = SUBSTRING( @sNumber, 1 , @iQuota )
SET @sHundOfThou = REVERSE( @sHundOfThou )
END
IF @iCounter = 3
BEGIN
SET @sHundOfMill = SUBSTRING( @sNumber, 1 , @iQuota )
SET @sHundOfMill = REVERSE( @sHundOfMill )
END
IF @iCounter = 4
BEGIN
SET @sHundOfTril = SUBSTRING( @sNumber, 1 , @iQuota )
SET @sHundOfTril = REVERSE( @sHundOfTril )
END
SET @sNumber = SUBSTRING(@sNumber , @iQuota + 1 , @ilenght )
SET @iCounter = @iCounter + 1
--Obtiene su longitud
SET @iLenght = LEN(@sNumber)
END
/*Incializa las variables de resultados*/
SET @sResults1 = ''
set @sResults2 = ''
set @sResults3 = ''
set @sResults4 = ''
-- EXECUTE sp_ConvertHundredsOfThousands @sHundOfThou , @sResults2 OUTPUT
/*Unidades a Centenas*/
EXECUTE sp_ConvertHundreds @sHundreds, @sResults1 OUTPUT
/*Unidades de Millar a Centenas de Millar */
EXECUTE sp_ConvertHundredsOfThousands @sHundOfThou , @sResults2 OUTPUT
/*Unidades de Millon as Centenas de Millon*/
EXECUTE sp_ConvertHundredsOfMillion @sHundOfMill , @sResults3 OUTPUT
/*Unidades de Billon a Centenas de Billon*/
EXECUTE sp_ConvertHundredsOfThousands @sHundOfTril , @sResults4 OUTPUT
/************************************************************
Se evalúan las terminaciones que se agregarán para el caso de los Miles de Millones
*****************************************************************/
IF ( RTRIM( @sResults3 ) = '' )
AND ( RTRIM( @sResults4 ) <> '' )
AND ( RTRIM( @sResults1 ) = '' )
BEGIN
SET @sPlus = 'Millones'
END
ELSE
BEGIN
SET @sPlus = ''
END
/*Se concatena el resultado*/
SET @sResult =
LTRIM( RTRIM( @sResults4 ) ) + ' ' + @sPlus +
LTRIM( RTRIM( @sResults3 ) ) + ' ' +
LTRIM( RTRIM( @sResults2 ) ) + ' ' +
LTRIM( RTRIM( @sResults1 ) )
/*Agrega la palabra 'Pesos' y los centavos*/
SET @sResult = @sResult + ' Pesos' + ' ' +
LTRIM( RTRIM( @sDecimal ) ) + '/100 M.N.'
/*Verifica si es que existe alguna cantidad
antes de la palabra pesos, de no ser asi
pone CERO*/
IF CHARINDEX( 'P', LTRIM( @sResult ) ) = 1
BEGIN
SET @sResult = 'Cero ' + LTRIM( @sResult )
END
/*Verifica que se escriba "UN PESO" y no "UN PESOS"*/
IF ( CHARINDEX( 'UN', LTRIM( @sResult ) ) = 1 )
AND ( CHARINDEX( 'P', LTRIM( @sResult ) ) = 4 )
BEGIN
SET @sResult = REPLACE( @sResult, 'Pesos', 'Peso' )
END
/*Verifica que se introduzca la palabra "DE" en el caso de los millones cerrados (Cuando el Modulo es 0 se introduce)*/
/*Obtiene el número dividido entre 1 millón*/
SET @sSubNumber = CAST( CAST( @iNumber AS DECIMAL ) / 1000000 AS VARCHAR(25) )
/*Separa la cadena después del punto*/
SET @sSubNumber = SUBSTRING( @sSubNumber , CHARINDEX( '.', @sSubNumber ) + 1 , LEN( @sSubNumber ) )
/*Comprueba después que la cadena separada sea mayor a 0 para poner la palabra "DE"*/
IF CAST( @sSubNumber AS INTEGER ) = 0
BEGIN
SET @sResult = REPLACE ( @sResult, 'Pesos', 'de pesos')
SET @sResult = REPLACE ( @sResult, ' de', 'de')
END
/*Para la posteridad, reemplaza donde halla ' pesos'*/
SET @sResult = REPLACE( @sResult, ' peso', ' peso' )
SET @sResult = LTRIM( RTRIM( @sResult ) )
/*¿Se convierten a mayúsculas?*/
IF @bUpperCase = 1
BEGIN
SET @sResult = LTRIM( RTRIM(UPPER( @sResult ) ) )
END
/*¿Es una respuesta para el proveedor*/
IF @bForProvider = 1
BEGIN
SELECT @sResult
END
hola.. algun programador que me pueda ayudar con este ejercicio mediante pseudocodigo y utililizando la estructura de control selectiva multiple (si no si) bien el ejercicio es el sgte:
ResponderEliminarse dispone de una maquina dispensadora de monedas : $5 dolares, $1dolar, $25 centavos, $5 centavos, $10 centavos, $1 centavo, la maquina recibe un monto de debe presentar en el menor numero de monedas posibles cuantas y de que tipos seran necesarias para para cubrir el monto
I cannot thank lemeridian funding service enough and letting people know how grateful I am for all the assistance that you and your team staff have provided and I look forward to recommending friends and family should they need financial advice or assistance @ 1,9% Rate for Business Loan .Via Contact : . lfdsloans@lemeridianfds.com / lfdsloans@outlook.com. WhatsApp...+ 19893943740. Keep up the great work.
ResponderEliminarThanks, Busarakham.