lunes, 16 de septiembre de 2013

Conversión de Número a Letra (Formato de Precio en Letras)


La siguiente función "num2letras" permite convertir un número desde 1 hasta 999 999 a letras. La forma de llamarla es, por ejemplo:

>>L=num2letras(13243.25)

L =

TRECE MIL DOSCIENTOS CUARENTA Y TRES PESOS 25/100 M.N.


functionres=num2letras(cantidad)
% @Jorge De Los Santos
% Ejemplo:  C=num2letras(2143.45)
% C =
% DOS MIL CIENTO CUARENTA Y TRES PESOS 45/100 M.N.
if~isnumeric(cantidad)
    error('Inserte un valor numérico');
end
uni={'','UN','DOS','TRES','CUATRO','CINCO','SEIS','SIETE','OCHO','NUEVE'};
unisp={'DIEZ','ONCE','DOCE','TRECE','CATORCE','QUINCE','DIECISEIS','DIECISIETE','DIECIOCHO','DIECINUEVE'};
dec={'','DIEZ','VEINTE','TREINTA','CUARENTA','CINCUENTA','SESENTA','SETENTA','OCHENTA','NOVENTA'};
decsp={'VEINTE','VEINTIUN','VEINTIDOS','VEINTITRES','VEINTICUATRO','VEINTICINCO','VEINTISÉIS','VEINTISIETE','VIENTIOCHO','VEINTINUEVE'};
cen={'','CIENTO','DOSCIENTOS','TRESCIENTOS','CUATROCIENTOS','QUINIENTOS','SEISCIENTOS','SETECIENTOS','OCHOCIENTOS','NOVECIENTOS'};
N=floor(cantidad);
S=num2str(N);
L=length(S);
if N<10
    res=getuni(num2str(N));
elseif N>9 & N<100
    if S(L-1)=='1';
        res=horzcat(getdec(num2str(N)),getuni(num2str(N)));
    elseif S(L-1)=='2'
        res=horzcat(getdec(num2str(N)));
    elseif S(L)=='0'
        res=horzcat(getdec(num2str(N)),' ',getuni(num2str(N)));
    else
        res=horzcat(getdec(num2str(N)),' Y ',getuni(num2str(N)));
    end
elseif N>99 & N<1000
    if S(L-1)=='1'
        res=horzcat(getcen(num2str(N)),' ',getdec(num2str(N)),' ',getuni(num2str(N)));
    elseif S(L-1)=='2'
        res=horzcat(getcen(num2str(N)),' ',getdec(num2str(N)));
    elseif S(L-1)=='0' | S(L)=='0'
        res=horzcat(getcen(num2str(N)),' ',getdec(num2str(N)),' ',getuni(num2str(N)));
    else
        res=horzcat(getcen(num2str(N)),' ',getdec(num2str(N)),' Y ',getuni(num2str(N)));
    end
elseif N>999 & N<1000000
     if S(L-1)=='1'
        res=horzcat(getmil(num2str(N)),' MIL ',getcen(num2str(N)),' ',getdec(num2str(N)));
     elseif S(L-1)=='2'
        res=horzcat(getmil(num2str(N)),' MIL ',getcen(num2str(N)),' ',getdec(num2str(N)));
     elseif S(L-1)=='0' | S(L)=='0'
         res=horzcat(getmil(num2str(N)),' MIL ',getcen(num2str(N)),' ',getdec(num2str(N)),' ',getuni(num2str(N)));
     else
        res=horzcat(getmil(num2str(N)),' MIL ',getcen(num2str(N)),' ',getdec(num2str(N)),' Y ',getuni(num2str(N)));
     end
end


    function u=getuni(num)
        ifstr2num(num)>9 & num(length(num)-1)=='1'
                u='';
        else
            uu=num(length(num));
            u=cell2mat(uni(str2num(uu)+1));
        end
    end
    function d=getdec(num)
        dd=num(length(num)-1);
        ddu=num(length(num));
        if dd=='1'
            d=cell2mat(unisp(str2num(ddu)+1));
        elseif dd=='2'
            d=cell2mat(decsp(str2num(ddu)+1));
        else
            d=cell2mat(dec(str2num(dd)+1));
        end
    end
    function c=getcen(num)
        ifstr2num(num)==100 || (num(length(num))=='0'&num(length(num)-1)=='0'&num(length(num)-2)=='1'),c='CIEN';
        else
        cc=num(length(num)-2);
        c=cell2mat(cen(str2num(cc)+1));
        end
    end
    function m=getmil(num)
        fori=1:length(num)-3
            B(i)=num(i);
        end
        l=length(B);
        A=str2num(B);
        if A<10
            m=getuni(num2str(A));
        elseif A>9 & A<100
            if B(l-1)=='1';
                m=horzcat(getdec(num2str(A)),getuni(num2str(A)));
            elseif B(l-1)=='2'
                m=horzcat(getdec(num2str(A)));
            elseif B(l)=='0'
                m=horzcat(getdec(num2str(A)),' ',getuni(num2str(A)));
            else
                m=horzcat(getdec(num2str(A)),' Y ',getuni(num2str(A)));
            end
        elseif A>99 & A<1000
            if B(l-1)=='1'
                m=horzcat(getcen(num2str(A)),' ',getdec(num2str(A)));
            elseif B(l-1)=='2'
                m=horzcat(getcen(num2str(A)),' ',getdec(num2str(A)));
            elseif B(l-1)=='0' | B(l)=='0'
                m=horzcat(getcen(num2str(A)),' ',getdec(num2str(A)),' ',getuni(num2str(A)));
            else
                m=horzcat(getcen(num2str(A)),' ',getdec(num2str(A)),' Y ',getuni(num2str(A)));
            end
        end
    end

%% Parte fraccionaria
c=cantidad-floor(cantidad);
c=num2str(roundn(c,-2));
for k=1:100
    s=strcat(num2str(k/100));
    cent=strcat(num2str(k),'/100 M.N.');
    if strcmp(c,s)==1,break,end;
end

res=horzcat(res,' PESOS ',cent); % Conversión final
end

No hay comentarios.:

Publicar un comentario