Foros del Web » Programando para Internet » PHP »

Como pasar un valor numerico a letras

Estas en el tema de Como pasar un valor numerico a letras en el foro de PHP en Foros del Web. Necesito saber el codigo de como pasar un valor numerico a letras. Se quiere implementar un formato de cheques donde el valor digitado en un ...
  #1 (permalink)  
Antiguo 07/09/2005, 15:07
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 8 meses
Puntos: 0
Como pasar un valor numerico a letras



Necesito saber el codigo de como pasar un valor numerico a letras.

Se quiere implementar un formato de cheques donde el valor digitado en un campo de texto se ha convertido a letras.

Ejemplo:

120000 lo pase a

ciento veinte mil pesos m/cte XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Se me es muy necesario. gracias
  #2 (permalink)  
Antiguo 07/09/2005, 16:20
 
Fecha de Ingreso: octubre-2004
Mensajes: 751
Antigüedad: 19 años, 6 meses
Puntos: 4
Si hubieras entrado en las preguntas más frecuentes (FAQ) hubieras encontrado esto que seguro que te sirve!

http://www.forosdelweb.com/f18/faqs-php-530600-post357290/

Si no es así dinos que es lo que falta!

Saludos,
__________________
sergiold
  #3 (permalink)  
Antiguo 08/09/2005, 07:37
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 8 meses
Puntos: 0
Ya encontre la forma ...

Oye muchas gracias por tu colaboracion.

  #4 (permalink)  
Antiguo 08/09/2005, 08:55
 
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

  #5 (permalink)  
Antiguo 08/09/2005, 10:09
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola higi

El código ya estaba en las FAQs (incluso más fácil de leer), no era necesario que lo repitieras aquí.

Saludos,
  #6 (permalink)  
Antiguo 08/09/2005, 10:56
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 8 meses
Puntos: 0
Bajale un poco a tu tono

Oye ... deja la agresividad ...

bajale unpoco a tu tonito OK

De igual forma de nada
  #7 (permalink)  
Antiguo 08/09/2005, 11:00
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Cita:
Iniciado por higi
Oye ... deja la agresividad ...

bajale unpoco a tu tonito OK

De igual forma de nada
Desde mi punto de vista no es agrasevidad, es una realidad, algo que esta en las FAQ nose tendria que repetir ni hablar, solamente cuando el codigo de las FAQ da error o similares.

Saludos.
  #8 (permalink)  
Antiguo 08/09/2005, 11:05
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 8 meses
Puntos: 0
De acuerdo

Cita:
Iniciado por DarioDario
Desde mi punto de vista no es agrasevidad, es una realidad, algo que esta en las FAQ nose tendria que repetir ni hablar, solamente cuando el codigo de las FAQ da error o similares.

Saludos.
Uy... que miedo

Oye si ves el codigo original al publicado hay variaciones OK

de todas formas lo tedre presente bueno necesito ayuda con otro tema me puedes colaborar?
  #9 (permalink)  
Antiguo 08/09/2005, 11:08
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por DarioDario
Desde mi punto de vista no es agrasevidad, es una realidad, algo que esta en las FAQ nose tendria que repetir ni hablar, solamente cuando el codigo de las FAQ da error o similares.

Saludos.
Oye Dario lo que necesito es lo siguiente:

Tengo las siguientes tablas;

CREATE TABLE beneficiario
(
nit varchar(20) NOT NULL,
descripbenef varchar(20) NOT NULL,
tipobenef varchar(20),
direccion varchar(40),
ciudad varchar(20),
telefono varchar(20),
PRIMARY KEY (nit)
) TYPE = INNODB;

CREATE TABLE documento
(
numdoc varchar(10) NOT NULL,
tipo char(2) NOT NULL,
anolapso char(2),
meslapso char(2),
nit varchar(20) NOT NULL,
indcu varchar(2) NOT NULL,
anodoc char(2),
mesdoc char(2),
diadoc char(2),
vrdoc double,
detadoc text,
descripuser varchar(20) NOT NULL,
PRIMARY KEY (numdoc),
INDEX (nit),
FOREIGN KEY (nit) REFERENCES beneficiario(nit) ON UPDATE CASCADE ON DELETE CASCADE,
) TYPE = INNODB;

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

Lo que se busca es que en el momento en el que se este ingresando la informacion del formualario documento, cuando se digite el NIT del beneficiario este me traiga en nombre de ese beneficiario y lo visualice en el mismo formulario documento, ademas que me permita seguir ingresando los demas datos del formulario manteniendo los datos ya ingresados en las casillas de texto para luego ser enviada e insertase en las tablas

Muchas gracias la colaboracion que me puedan brindar.
  #10 (permalink)  
Antiguo 08/09/2005, 11:09
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Cita:
Iniciado por higi
Uy... que miedo
Primero no necesitas el sarcasmo.
Cita:
Iniciado por higi
Oye si ves el codigo original al publicado hay variaciones OK
Si el thread tratara de buscar la mejor opción con respecto a esto, tu aporte seria muy agradable.
Cita:
Iniciado por higi
de todas formas lo tedre presente bueno necesito ayuda con otro tema me puedes colaborar?
Si me dices que problema tienes te ayudo con mucho gusto mientras mis conocimientos puedan ayudarte.
  #11 (permalink)  
Antiguo 08/09/2005, 11:10
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo higi

No me parece que mi anterior mensaje sea en absoluto agresivo ni que tenga un "tonito" alto. Te dije, y no me importa repetirlo, que un código que ya está en el foro a disposición de cualquier usuario, sobre todo si es tan largo como este, no hay por que repetirlo. Imaginate que ponemos el código cada vez que alguien pregunta lo mismo...

Saludos,
  #12 (permalink)  
Antiguo 08/09/2005, 11:13
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Bueno mientras escribia el post anterior has puesto la consulta . Como veo necesitarias utilizar AJAX, de eso no tengo ningun conocimiento pero si hay un subforo que te podria ayudar. De todas formas te recomendaria que abras un nuevo thrad para recivir una ayuda mas especifica y eficas y no mezclar tu problema con el de este thread ya que mucha gente no miraria tu post y tendrias menos ayuda y se divirtua este thread.

Saludos.

---------- EDITADO ---------

Cita:
Iniciado por JavierB
Imaginate que ponemos el código cada vez que alguien pregunta lo mismo...
Tiene razón ya que seria un caos y por esta razon se han inventado las FAQ.


higi por favor abre un nuevo thread.
  #13 (permalink)  
Antiguo 08/09/2005, 11:14
 
Fecha de Ingreso: agosto-2005
Mensajes: 192
Antigüedad: 18 años, 8 meses
Puntos: 0
Sonrisa Me puedes colaborar con otro tema ???

Lo que necesito es lo siguiente:

Tengo las siguientes tablas;

CREATE TABLE beneficiario
(
nit varchar(20) NOT NULL,
descripbenef varchar(20) NOT NULL,
tipobenef varchar(20),
direccion varchar(40),
ciudad varchar(20),
telefono varchar(20),
PRIMARY KEY (nit)
) TYPE = INNODB;

CREATE TABLE documento
(
numdoc varchar(10) NOT NULL,
tipo char(2) NOT NULL,
anolapso char(2),
meslapso char(2),
nit varchar(20) NOT NULL,
indcu varchar(2) NOT NULL,
anodoc char(2),
mesdoc char(2),
diadoc char(2),
vrdoc double,
detadoc text,
descripuser varchar(20) NOT NULL,
PRIMARY KEY (numdoc),
INDEX (nit),
FOREIGN KEY (nit) REFERENCES beneficiario(nit) ON UPDATE CASCADE ON DELETE CASCADE,
) TYPE = INNODB;

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

Lo que se busca es que en el momento en el que se este ingresando la informacion del formualario documento, cuando se digite el NIT del beneficiario este me traiga en nombre de ese beneficiario y lo visualice en el mismo formulario documento, ademas que me permita seguir ingresando los demas datos del formulario manteniendo los datos ya ingresados en las casillas de texto para luego ser enviada e insertase en las tablas

Muchas gracias la colaboracion que me puedan brindar.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:12.