Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/09/2005, 08:55
higi
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 8 meses
Puntos: 0
Aqui va el codigo ... para el que le interece

<html>
<body>

<?php

function numerotexto ($numero) {
// Primero tomamos el numero y le quitamos los caracteres especiales y extras
// Dejando solamente el punto "." que separa los decimales
// Si encuentra mas de un punto, devuelve error.
// NOTA: Para los paises en que el punto y la coma se usan de forma
// inversa, solo hay que cambiar la coma por punto en el array de "extras"
// y el punto por coma en el explode de $partes

$extras=array("/[\$]/","/ /","/,/","/-/");
$limpio=preg_replace($extras,"",$numero);
$partes=explode(".",$limpio);
if (count($partes)>2) {
return "Error, el n&uacute;mero no es correcto";
exit();
}

// Ahora explotamos la parte del numero en elementos de un array que
// llamaremos $digitos, y contamos los grupos de tres digitos
// resultantes

$digitos_piezas=chunk_split ($partes[0],1,"#");
$digitos_piezas=substr($digitos_piezas,0,strlen($d igitos_piezas)-1);
$digitos=explode("#",$digitos_piezas);
$todos=count($digitos);
$grupos=ceil (count($digitos)/3);

// comenzamos a dar formato a cada grupo

$unidad = array ('un','dos','tres','cuatro','cinco','seis','siete' ,'ocho','nueve');
$decenas = array ('diez','once','doce','trece','catorce','quince');
$decena = array ('dieci','veinti','treinta','cuarenta','cincuenta' ,'sesenta','setenta','ochenta','noventa');
$centena = array ('ciento','doscientos','trescientos','cuatrociento s','quinientos','seiscientos','setecientos','ochoc ientos','novecientos');
$resto=$todos;

for ($i=1; $i<=$grupos; $i++) {

// Hacemos el grupo
if ($resto>=3) {
$corte=3; } else {
$corte=$resto;
}
$offset=(($i*3)-3)+$corte;
$offset=$offset*(-1);

// la siguiente seccion es una adaptacion de la contribucion de cofyman y JavierB

$num=implode("",array_slice ($digitos,$offset,$corte));
$resultado[$i] = "";
$cen = (int) ($num / 100); //Cifra de las centenas
$doble = $num - ($cen*100); //Cifras de las decenas y unidades
$dec = (int)($num / 10) - ($cen*10); //Cifra de las decenas
$uni = $num - ($dec*10) - ($cen*100); //Cifra de las unidades
if ($cen > 0) {
if ($num == 100) $resultado[$i] = "cien";
else $resultado[$i] = $centena[$cen-1].' ';
}//end if
if ($doble>0) {
if ($doble == 20) {
$resultado[$i] .= " veinte";
}elseif (($doble < 16) and ($doble>9)) {
$resultado[$i] .= $decenas[$doble-10];
}else {
$resultado[$i] .=' '. $decena[$dec-1];
}//end if
if ($dec>2 and $uni<>0) $resultado[$i] .=' y ';
if (($uni>0) and ($doble>15) or ($dec==0)) {
if ($i==1 && $uni == 1) $resultado[$i].="uno";
elseif ($i==2 && $num == 1) $resultado[$i].="";
else $resultado[$i].=$unidad[$uni-1];
}
}

// Le agregamos la terminacion del grupo
switch ($i) {
case 2:
$resultado[$i].= ($resultado[$i]=="") ? "" : " mil ";
break;
case 3:
$resultado[$i].= ($num==1) ? " mill&oacute;n " : " millones ";
break;
}
$resto-=$corte;
}

// Sacamos el resultado (primero invertimos el array)
$resultado_inv= array_reverse($resultado, TRUE);
$final="";
foreach ($resultado_inv as $parte){
$final.=$parte;
}
return $final;
}

$ejemplo1=56424.21;
$ejemplo2="$ 6,125,652.11";

echo numerotexto($ejemplo1);
echo "<br>";
echo numerotexto($ejemplo2);

?>
</body>
</html>

.................

Bueno que les vaya bonito. bye