Srs.,
Boa tarde, gostaria de saber se alguém sabe uma função simples para gerar um extenso de um numero.
Muito Obrigado.
JCTQ
Número por Extenso
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Olá jctq
Veja esse tópico:
http://www.glufke.net/oracle/viewtopic.php?t=36
Sempre antes de perguntar no forum lembre-se de pesquisar, pois provavelmente alguém já teve uma dúvida igual.
Essa é a vantagem em relação a LISTAS de EMAIL: no forum temos um histórico / base de conhecimento!!!
Veja esse tópico:
http://www.glufke.net/oracle/viewtopic.php?t=36
Sempre antes de perguntar no forum lembre-se de pesquisar, pois provavelmente alguém já teve uma dúvida igual.
Essa é a vantagem em relação a LISTAS de EMAIL: no forum temos um histórico / base de conhecimento!!!
-
- Rank: Analista Júnior
- Mensagens: 88
- Registrado em: Sex, 18 Ago 2006 11:13 am
- Localização: São Paulo - SP
Bertosro
MSN / TALK - roberto.fernandes@gmail.com
MSN / TALK - roberto.fernandes@gmail.com
-- Start of DDL Script for Function CTMS.FRT_EXTENSO_MONETARIO
-- Generated 18-out-2006 16:19:18 from CTMS@CTMS
CREATE OR REPLACE
FUNCTION frt_extenso_monetario( VALOR NUMBER )
RETURN VARCHAR2
IS
/*
VERSAO : 1.1
OBJETIVO : CONVERTER NUMENROS EM EXTENSO MONETARIO
DESENVOLVEDOR: ROBERTO FERNANDES SOBRINHO
ALTERACOES :
*/
VALOR_STRING VARCHAR2(256);
VALOR_CONV VARCHAR2(25);
IND NUMBER;
TRES_DIGITOS VARCHAR2(3);
TEXTO_STRING VARCHAR2(256);
BEGIN
VALOR_CONV := TO_CHAR( TRUNC((ABS(VALOR) * 100),0) , '0999999999999999999' );
VALOR_CONV := SUBSTR( VALOR_CONV , 1 , 18 ) || '0' || SUBSTR( VALOR_CONV , 19, 2 );
IF TO_NUMBER(VALOR_CONV) = 0 THEN
RETURN('ZERO');
END IF;
FOR IND IN 1..7 LOOP
TRES_DIGITOS := SUBSTR( VALOR_CONV , (((IND-1)*3)+1) , 3 );
TEXTO_STRING := '' ;
-- EXTENSO PARA CENTENA
IF SUBSTR(TRES_DIGITOS,1,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING || 'DUZENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING || 'TREZENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING || 'QUATROCENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING || 'QUINHENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING || 'SEISCENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING || 'SETECENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING || 'OITOCENTOS ' ;
ELSIF SUBSTR(TRES_DIGITOS,1,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING || 'NOVECENTOS ' ;
END IF;
IF SUBSTR(TRES_DIGITOS,1,1) = '1' THEN
IF SUBSTR(TRES_DIGITOS,2,2) = '00' THEN
TEXTO_STRING := TEXTO_STRING || 'CEM ' ;
ELSE
TEXTO_STRING := TEXTO_STRING || 'CENTO ' ;
END IF;
END IF;
-- EXTENSO PARA DEZENA
IF SUBSTR(TRES_DIGITOS,2,1) <> '0' AND TEXTO_STRING IS NOT NULL THEN
TEXTO_STRING := TEXTO_STRING || 'E ';
END IF;
IF SUBSTR(TRES_DIGITOS,2,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING ||'VINTE ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING ||'TRINTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING ||'QUARENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING ||'CINQUENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING ||'SESSENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING ||'SETENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING ||'OITENTA ';
ELSIF SUBSTR(TRES_DIGITOS,2,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING ||'NOVENTA ';
END IF;
IF SUBSTR(TRES_DIGITOS,2,1) = '1' THEN
IF SUBSTR(TRES_DIGITOS,3,1) <> '0' THEN
IF SUBSTR(TRES_DIGITOS,3,1) = '1' THEN
TEXTO_STRING := TEXTO_STRING ||'ONZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING ||'DOZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING ||'TREZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING ||'CATORZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING ||'QUINZE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZESSEIS ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZESSETE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZOITO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING ||'DEZENOVE ';
END IF;
ELSE
TEXTO_STRING := TEXTO_STRING ||'DEZ ' ;
END IF;
ELSE
-- EXTENSO PARA UNIDADE
IF SUBSTR(TRES_DIGITOS,3,1) <> '0' AND TEXTO_STRING IS NOT NULL THEN
TEXTO_STRING := TEXTO_STRING || 'E ';
END IF;
IF SUBSTR(TRES_DIGITOS,3,1) = '1' THEN
TEXTO_STRING := TEXTO_STRING ||'UM ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '2' THEN
TEXTO_STRING := TEXTO_STRING ||'DOIS ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '3' THEN
TEXTO_STRING := TEXTO_STRING ||'TRES ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '4' THEN
TEXTO_STRING := TEXTO_STRING ||'QUATRO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '5' THEN
TEXTO_STRING := TEXTO_STRING ||'CINCO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '6' THEN
TEXTO_STRING := TEXTO_STRING ||'SEIS ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '7' THEN
TEXTO_STRING := TEXTO_STRING ||'SETE ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '8' THEN
TEXTO_STRING := TEXTO_STRING ||'OITO ';
ELSIF SUBSTR(TRES_DIGITOS,3,1) = '9' THEN
TEXTO_STRING := TEXTO_STRING ||'NOVE ';
END IF;
END IF;
IF TO_NUMBER( TRES_DIGITOS ) > 0 THEN
IF TO_NUMBER( TRES_DIGITOS ) = 1 THEN
IF IND = 1 THEN
TEXTO_STRING := TEXTO_STRING || 'QUATRILHÃO ' ;
ELSIF IND = 2 THEN
TEXTO_STRING := TEXTO_STRING || 'TRILHÃO ' ;
ELSIF IND = 3 THEN
TEXTO_STRING := TEXTO_STRING || 'BILHÃO ' ;
ELSIF IND = 4 THEN
TEXTO_STRING := TEXTO_STRING || 'MILHÃO ' ;
ELSIF IND = 5 THEN
TEXTO_STRING := TEXTO_STRING || 'MIL ' ;
END IF;
ELSE
IF IND = 1 THEN
TEXTO_STRING := TEXTO_STRING || 'QUATRILHÕES ' ;
ELSIF IND = 2 THEN
TEXTO_STRING := TEXTO_STRING || 'TRILHÕES ' ;
ELSIF IND = 3 THEN
TEXTO_STRING := TEXTO_STRING || 'BILHÕES ' ;
ELSIF IND = 4 THEN
TEXTO_STRING := TEXTO_STRING || 'MILHÕES ' ;
ELSIF IND = 5 THEN
TEXTO_STRING := TEXTO_STRING || 'MIL ' ;
END IF;
END IF;
END IF;
VALOR_STRING := VALOR_STRING || TEXTO_STRING;
-- ESCRITA DA MOEDA CORRENTE
IF IND = 5 THEN
IF TO_NUMBER( SUBSTR( VALOR_CONV , 16 , 3 )) > 0 AND VALOR_STRING IS
NOT NULL THEN
VALOR_STRING := RTRIM(VALOR_STRING) || ', ';
END IF;
ELSE
IF IND < 5 AND VALOR_STRING IS NOT NULL THEN
VALOR_STRING := RTRIM(VALOR_STRING) || ', ';
END IF;
END IF;
IF IND = 6 THEN
IF TO_NUMBER( SUBSTR( VALOR_CONV , 1 , 18 ) ) > 1 THEN
VALOR_STRING := VALOR_STRING || 'REAIS ';
ELSIF TO_NUMBER( SUBSTR( VALOR_CONV , 1 , 18 ) ) = 1 THEN
VALOR_STRING := VALOR_STRING || 'REAL ';
END IF;
IF TO_NUMBER( SUBSTR( VALOR_CONV , 20 , 2 ) ) > 0 AND
LENGTH(VALOR_STRING) > 0 THEN
VALOR_STRING := VALOR_STRING || 'E ';
END IF;
END IF;
-- ESCRITA PARA CENTAVOS
IF IND = 7 THEN
IF TO_NUMBER( SUBSTR( VALOR_CONV , 20 , 2 ) ) > 1 THEN
VALOR_STRING := VALOR_STRING || 'CENTAVOS ';
ELSIF TO_NUMBER( SUBSTR( VALOR_CONV , 20 , 2 ) ) = 1 THEN
VALOR_STRING := VALOR_STRING || 'CENTAVO ';
END IF;
END IF;
END LOOP;
RETURN( RTRIM(VALOR_STRING) );
EXCEPTION
WHEN OTHERS THEN
RETURN( '*** VALOR INVALIDO ***' );
END;
/
-- End of DDL Script for Function CTMS.FRT_EXTENSO_MONETARIO
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes