Convertir entero o decimal a letras

Necesito convertir un valor entero o decimal a letras Ej:
57->Cincuenta y siete
14.57 -> Catorce punto cincuenta y siete
2.06 -> Dos punto cero seis
4.80 -> Cuatro punto ochenta
...

1 respuesta

Respuesta
1
Perdoname, pero si estas hablando de porcentajes (en realidad esto esta pensado para moneda), 14.7% ES catorce punto setenta por ciento.
De todas maneras, te publique reformando para que lo veas.
simplemente agregas despues de "resu=''" esto:
parte='' + importe;
partes=parte.split('.');
y cambias
digitos[0]=((importe-Math...
por:
digitos[0]=partes[1]*1;
Genial...
Me sirve de mucho!
Saludos.
Que pena molestar tanto pero he intentado con 14.07 y sale bien pero si le doy 14.7 me sale catorce punto setenta y no catorce punto siete.
Agradezco tu ayuda.
Te puedo asegurar que este no es uno de mis mejores códigos ;)
Pero... no encontré en la web nada mejor jajajaja...
La prueba "en vivo" esta en:
<a href="http://www.r3soft.com.ar/impolets.html">www.r3soft.com.ar/impolets.html</a>
Va:
function impolets(importe) {
var uni=new Array('','uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez','once','doce','trece','catorce','quince','dieciseis','diecisiete','dieciocho','diecinueve','veinte','ventiun','veintidos','veintitres','venticuatro','veinticinco','veintiseis','veintisiete','veintiocho','veintinueve');
var dece=new Array('cero', 'dieci', 'veinti', 'treinta', 'cuarenta', 'cincuenta', 'sesenta', 'setenta', 'ochenta', 'noventa');
var cente=new Array('cero', 'ciento', 'doscientos', 'trescientos', 'cuatrocientos', 'quinientos', 'seiscientos', 'setecientos', 'ochocientos', 'novecientos');
var mile='mil';
var millo='millones';
var millo1='millon';
var resu='';
enteros=Math.floor(importe);
xx='' + enteros;
var digitos=new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
for (var i=2, j=xx.length; i<=j; i++) digitos=Math.floor((importe / Math.pow(10,(i-1))) %10);
digitos[1]=Math.floor(Math.floor(importe)%10);
digitos[0]=((importe-Math.floor(importe))*100);
if (enteros<31) resu=uni(enteros);
else {
for (var i=xx.length, j=1; i>=j; i--) {
nume=digitos;
switch (i) {
case 0:
break;
case 1:
if (digitos[2]>2) resu+=uni[nume]+' ';
break;
case 2:
uni[21]='veintiuno';
dgg=(digitos[2]*10)+digitos[1];
if (nume<3) resu+=uni[dgg] + ' ';
else {
resu+=dece[nume];
if (digitos[1]>0) resu+= ' y ';
}
break;
case 3:
if ((!digitos[2]) && (!digitos[1]) && (nume==1)) resu+="cien ";
else if (nume>0) resu+=cente[nume]+' ';
break;
case 4:
if ((digitos[5]>2) || (digitos[5]<1) && (digitos[4]>0)) {
if (nume>1) resu+=uni[nume];
if ((nume==1) && (digitos[5]>2)) resu+=' un ';
resu+=' mil ';
}
break;
case 5:
dgg=(digitos[5]*10)+digitos[4];
if (nume>0) {
if ((nume<3) && (dgg!=0)) resu+= uni[dgg] + ' mil ';
else {
if (dgg!=0) resu+=dece[nume];
if (digitos[4]>0) resu+=' y ';
}
}
break;
case 6:
if ((!digitos[5]) && (digitos[4]) && (nume==1)) resu+='cien ';
else if (nume>0) resu+=cente[nume] + ' ';
break;
case 7:
if ((digitos[8]>2) || (digitos[8]<1)) {
if (nume>1) resu+=uni[nume];
else if ((nume==1) && (digitos[8]>2)) resu+=' un ';
else if ((nume==1) && (digitos[8]==0)) resu+= ' un millon' ;
else resu+=' millones ';
}
break;
case 8:
dgg=(digitos[8]*10)+digitos[7];
if ((nume<3) && (dgg!=0)) resu+=uni[dgg] + ' millones ';
else {
if (dgg!=0) resu+=dece[nume];
if (digitos[7]>0) resu+=' y ';
}
break;
case 9:
if (nume>0) resu+=cente[nume] + ' ';
break;
default:
break;
}
}
}
if (digitos[0]>0) resu+='C/' + Math.round(digitos[0]) + '/100';
return resu;
}
//-->
</script>
Saludos.
Estuve mirando la página que mencionas pero solo acepta números enteros, pero decimales no; esto lo necesito para los porcentajes ej:
4.78
Cuatro punto setenta y ocho por ciento
Simplemente cambia la antepenúltima linea por esto:
if (digitos[0]>0) resu+=' punto ' + impolets(Math.round(digitos[0]));
Saludos.
No soy muy experto en esto del javascript estuve "cacharreando" y me di cuenta que cuando dígito 47.05
me arroja cuarenta y siente punto cinco cuando en porcentaje seria
cuarenta y siente punto cero cinco
Estuve mirando y trate de poner ese pequeño detalle pero no pudde.
Agradezco la ayuda que me brindas.
Vamos!
Cambia la linea del if(digitos[0]....
por esto:
if (digitos[0]>9) resu+=' punto ' + impolets(Math.round(digitos[0]));
else if (digitos[0]>0) resu+=' punto cero ' + impolets(Math.round(digitos[0]));

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas