PHP:¿Cómo convierto un número a una cadena de texto que lo represente (p.e.- 2,115 = Dos mil ciento quince)?
De Foros del Web
Utiliza el siguiente código (instrucciones para usarlo al final del post).
1.- Guarda esta función en un archivo, por ejemplo numeros.inc
Código PHP:
<? function numerotexto ($numero) { // Primero tomamos el número y le quitamos los caracteres especiales y extras // Dejando solamente el punto "." que separa los decimales // Si encuentra más de un punto, devuelve error. // NOTA: Para los paises en que el punto y la coma se usan de forma // inversa, sólo 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ú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 dígitos // resultantes $digitos_piezas=chunk_split ($partes[0],1,"#"); $digitos_piezas=substr($digitos_piezas,0,strlen($digitos_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','cuatrocientos','quinientos','seiscientos','setecientos','ochocientos','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 sección es una adaptación de la contribución 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 terminación del grupo switch ($i) { case 2: $resultado[$i].= ($resultado[$i]=="") ? "" : " mil "; break; case 3: $resultado[$i].= ($num==1) ? " milló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; } ?>
Para llamarlo, sólo incluye el archivo y llama a la función con el numero que quieres convertir. Puede venir en formato numérico (12345.67) o como cadena ("$ 4,127.87")
Código PHP:
<? include ("numeros.inc"); $ejemplo1=56424.21; $ejemplo2="$ 6,125,652.11" echo numerotexto($ejemplo1); echo "<br>" echo numerotexto($ejemplo2); ?>
NOTA: La parte de los decimales no esta siendo usada, pero está disponible (dentro de la función) como $partes[1], será muy sencillo tomarla y utilizarla si a alguien le sirve de algo.
--Manoloweb 05 Abr 2003
Este artículo es parte de las FAQs de PHP y el Manual de PHP.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
