Lo primero que hace el método traducir es dividir en un vector la parte entera y la parte fraccionaria en caso
que exista:
$partes=explode('.',$num);
Llamamos al método privado traduccionParcial enviándole la parte entera del número:
$entera=$this->traduccionParcial($s);
Lo mismo se hace con el valor después del punto en caso que exista:
if (count($partes)>1)
{
$entera=$entera.' con '.$partes[1];
}
La función traduccionParcial genera un string agregando tantos ceros al principio como necesite, de tal
manera que la cantidad de dígitos del número sea un múltiplo de 3.
settype($s,'string');
$faltan=strlen($s) % 3;
$cad='';
if ($faltan!=0)
$faltan=3-$faltan;
for($f=1;$f<=$faltan;$f++)
{
$cad.='0';
}
$s=$cad.$s;
Luego de esto la variable $s seguro tiene una cantidad de dígitos múltiplo de 3.
Si $s tiene 3 caracteres y los tres son iguales a cero luego debe retornar cero:
if (strlen($s)<=3 && $s[0]==0 && $s[1]==0 && $s[2]==0)
$resu='cero';
sino extraemos los últimos tres caracteres del número y llamamos al método privado convertir que genera
una cadena con la conversión parcial de esos tres dígitos:
$cad1=substr($s,strlen($s)-3,3);
$resu=$this->convertir($cad1);
De forma similar si tiene más de tres dígitos el número extraemos los valores correspondientes y llamamos
al método convertir:
if (strlen($s)>3)
{
$resu2='';
$cad2=substr($s,strlen($s)-6,3);
if ($cad2[0]==0 && $cad2[1]==0 && $cad2[2] ==1)
$resu2='mil ';
else
if ($cad2[0]!=0 || $cad2[1]!=0 || $cad2[2] !=0)
$resu2=$this->convertir($cad2,2).'mil ';
$resu=$resu2.$resu;
}
Otro tanto hacemos si tiene más de 6 o 9 dígitos:
if (strlen($s)>6)
{
$resu2='';
$cad3=substr($s,strlen($s)-9,3);
if ($cad3[0]=='0' && $cad3[1]=='0' && $cad3[2]==1)
$resu2='un millón ';
else
if ($cad3[0]!=0 || $cad3[1]!=0 || $cad3[2] !=0)
$resu2=$this->convertir($cad3,2).'millones ';
$resu=$resu2.$resu;
}
if (strlen($s)>9)
{
$resu2='';
$cad4=substr($s,strlen($s)-12,3);
if ($cad4[0]=='0' && $cad4[1]=='0' && $cad4[2]==1)
{
if ($cad3[0]==0 && $cad3[1]==0 && $cad3[2]==0)
$resu2='mil millones ';
else
$resu2='mil ';
}
else
$resu2=$this->convertir($cad4,2).'mil millones ';
$resu=$resu2.$resu;
}
El método convertir genera un valor parcial con el número de tres dígitos que recibe.