Foros del Web » Programando para Internet » PHP »

Eliminar relleno de ceros

Estas en el tema de Eliminar relleno de ceros en el foro de PHP en Foros del Web. Hola, estoy haciendo una clase para poder mostrar textualmente un numero (uno, dieciocho, tresciento, etc...) y tengo implementada varias funciones para obtener los valores cuando ...
  #1 (permalink)  
Antiguo 03/12/2008, 10:05
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 16 años, 10 meses
Puntos: 2
Eliminar relleno de ceros

Hola, estoy haciendo una clase para poder mostrar textualmente un numero (uno, dieciocho, tresciento, etc...) y tengo implementada varias funciones para obtener los valores cuando son 1, 2 o 3 dígitos.

El problema, es que puede ocurrir que un valor comience con ceros, por ejemplo; 1.000.010. El funcionamiento de mi clase consiste en separar el numero por los puntos y por ejemplo, si quiero obtener el nombre de la tercera parte (010) y trato de convertir ese numero a entero obtengo 8

Código PHP:
$num = (int) 010
Había pensado en procesar el numero como cadena y eliminar los 0 a la izquierda, pero quisiera saber si existe una forma mas rápida.

Gracias!
__________________
KIBIT.cl
  #2 (permalink)  
Antiguo 03/12/2008, 11:25
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Respuesta: Eliminar relleno de ceros

A lo mejor esto te sirve:

Código PHP:
<?php
$a
=$_GET['numero'];
$numero=0;
$inter=0;
for(
$l=1;pow(1000,$l-1)<$a;$l++)

{
    
$numero=floor((($a%pow(1000,$l)))/(pow(1000,$l-1)));

    echo (
"1000^".$l." : ".$numero)."<br>";

}
?>
http://3wservicios.com/numeros1.php?...10040060008099

Pero no sé muy bien como lo tienes...

Salu2 ;)
__________________
[+]
[+]
  #3 (permalink)  
Antiguo 03/12/2008, 13:48
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Eliminar relleno de ceros

Excelente, justo lo que necesitaba

Gracias!

edit: solo un pequeño bug, cuando se ingresa 1000 da 0, pero es solucionable
__________________
KIBIT.cl

Última edición por Snd234; 03/12/2008 a las 13:55
  #4 (permalink)  
Antiguo 03/12/2008, 14:06
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Eliminar relleno de ceros

aqui te dejo una libreria ya hecha solo para que la llames.......... esta te convertie de numeros a letras como deseas:

osea: 15 en "quince"..........

archivo: numerosALetras.class
Código PHP:
<?php
class numerosALetras{
/*
Script Name: *numerosAletras
Description: Permite convertir numeros a letras mediante el uso de una sencilla clase.
Author: Garcia Rodriguez Ricardo
Author URI: http://www.masterojitos.com
*/
        
var $resultado;
        var 
$antes_con_despues='con';
        var 
$despues 'decimales';
        var 
$antes_sin_despues='';
        
/*
            Constructor
        */
        
function numerosALetras($valor=''){
                if(
is_numeric($valor))
                    return 
$this->convertir($valor);
                return 
false;
            }
        
/*
            Retorna el valor de la centena que se le envie como parametro.
        */
        
function centenas($centenas){
                
$valores = array('cero','uno','dos','tres','cuatro','cinco','seis',
                
'siete','ocho','nueve','diez','once','doce','trece','catorce',
                
'quince',20=>'veinte',30=>'treinta',40=>'cuarenta',50=>'cincuenta',
                
60=>'sesenta',70=>'setenta',80=>'ochenta',90=>'noventa',100=>'ciento',
                
101=>'quinientos',102=>'setecientos',103=>'novecientos');
        
                switch(
$centenas){
                        case 
'1': return $valores[100]; break;
                        case 
'5': return $valores[101]; break;
                        case 
'7': return $valores[102]; break;
                        case 
'9': return $valores[103]; break;
                        default: return 
$valores[$VCentena];
                    }
            }
        
/*
            Retorna el valor de la unidad que se le envie como parametro.
        */
        
function unidades($unidad){
                
$valores = array('cero','un','dos','tres','cuatro','cinco','seis',
                
'siete','ocho','nueve','diez','once','doce','trece','catorce',
                
'quince',20=>'veinte',30=>'treinta',40=>'cuarenta',50=>'cincuenta',
                
60=>'sesenta',70=>'setenta',80=>'ochenta',90=>'noventa',100=>'ciento',
                
101=>'quinientos',102=>'setecientos',103=>'novecientos'
                
);
            
                return 
$valores[$unidad];
            }
    
        
/*
            Retorna el valor de la decena que se le envie como parametro
        */
        
function decenas($decena){
                
$valores = array('cero','uno','dos','tres','cuatro','cinco','seis','siete',
                
'ocho','nueve','diez','once','doce','trece','catorce','quince',20=>'veinte',30=>'treinta',
                
40=>'cuarenta',50=>'cincuenta',60=>'sesenta',70=>'setenta',80=>'ochenta',90=>'noventa',
                
100=>'ciento',101=>'quinientos',102=>'setecientos',103=>'novecientos');
        
                return 
$valores[$decena];
            }
    
    
        function 
evalua($valor){
                if(
$valor==0)
                    return 
'cero';
                    
                
$decimales 0;
                
$letras '';
                while(
$valor!=0){
                        
// Validamos si supera los 100 millones
                        
if($valor>=1000000000)
                            return 
'L&iacute;mite de aplicaci&oacute;n exedido.';
                        
                        
//Centenas de Millón
                        
if (($valor<1000000000) and ($valor>=100000000)){
                                if ((
intval($valor/100000000)==1) and (($valor-(intval($valor/100000000)*100000000))<1000000))
                                        
$letras.=(string)'cien millones ';
                                    else{
                                        
$letras.=$this->centenas(intval($valor/100000000));
                                        If ((
intval($valor/100000000)<>1) and (intval($valor/100000000)<>5) and (intval($valor/100000000)<>7) and (intval($valor/100000000)<> 9))
                                                
$letras.=(string)'ciento ';
                                            else
                                                
$letras.=(string)' ';
                                    }
                                
$valor=$valor-(Intval($valor/100000000)*100000000);
                            }
            
                        
//Decenas de Millón
                        
if(($valor<100000000) and ($valor>=10000000)){
                                if(
intval($valor/1000000)<16){
                                        
$tempo=$this->decenas(intval($valor/1000000));
                                        
$letras.=(string)$tempo;
                                        
$letras.=(string)' millones ';
                                        
$valor=$valor-(intval($valor/1000000)*1000000);
                                    }else{
                                        
$letras.=$this->decenas(intval($valor/10000000)*10);
                                        
$valor=$valor-(intval($valor/10000000)*10000000);
                                        if (
$valor>1000000)
                                            
$letras.=$letras.' y ';
                                    }
                            }
            
                        
//Unidades de Millon
                        
if(($valor<10000000) and ($valor>=1000000)){
                                    
$tempo=(intval($valor/1000000));
                                    if(
$tempo==1)
                                            
$letras.=(string)' un mill&oacute;n ';
                                        else{
                                            
$tempounidades(intval($valor/1000000));
                                            
$letras.=(string)$tempo;
                                            
$letras.=(string)" millones ";
                                        }
                                
$valor=$valor-(intval($valor/1000000)*1000000);
                            }
            
                        
//Centenas de Millar
                        
if(($valor<1000000) and ($valor>=100000)){
                                
$tempo=(intval($valor/100000));
                                
$tempo2=($valor-($tempo*100000));
                                if((
$tempo==1) and ($tempo2<1000))
                                        
$letras.=(string) 'cien mil ';
                                    else{
                                        
$tempo=$this->centenas(intval($valor/100000));
                                        
$letras.=(string)$tempo;
                                        
$tempo=(intval($valor/100000));
                                        if((
$tempo <> 1) and ($tempo <> 5) and ($tempo <> 7) and ($tempo <> 9))
                                                
$letras.=(string)'ciento ';
                                            else
                                                
$letras.=(string)' ';
                                    }
                                
$valor=$valor-(intval($valor/100000)*100000);
                            }
            
                        
//Decenas de Millar
                        
if(($valor<100000) and ($valor>=10000)){
                                
$tempo=(intval($valor/1000));
                                if(
$tempo<16){
                                        
$tempo=$this->decenas(intval($valor/1000));
                                        
$letras.=(string)$tempo;
                                        
$letras.=(string)' mil ';
                                        
$valor=$valor-(intval($valor/1000)*1000);
                                    }else{
                                        
$tempo=$this->decenas(intval($valor/10000)*10);
                                        
$letras.=(string) $tempo;
                                        
$valor=$valor-(intval(($valor/10000))*10000);
                                        if(
$valor>1000)
                                                
$letras.=(string)' y ';
                                            else
                                                
$letras.=(string)' mil ';
                                    }
                            }
            
            
                        
//Unidades de Millar
                        
if(($valor<10000) and ($valor>=1000)){
                                
$tempo=intval($valor/1000);
                                if(
$tempo==1)
                                    
$letras.=(string)'';//'un';
                                    
else{
                                        
$tempo=$this->unidades(intval($valor/1000));
                                        
$letras.=(string) $tempo;
                                    }
                                
$letras.=(string)' mil ';
                                
$valor=$valor-(intval($valor/1000)*1000);
                            }
            
                        
//Centenas
                        
if(($valor<1000) and ($valor>99)){
                                if ((
intval($valor/100)==1) and (($valor-(intval($valor/100)*100))<1))
                                        
$letras.='cien ';
                                    else{
                                        
$temp=(intval($valor/100));
                                        
$l2=$this->centenas($temp);
                                        
$letras.=(string) $l2;
                                        if((
intval($valor/100)<>1) and (intval($valor/100)<>5) and (intval($valor/100)<>7) and (intval($valor/100)<>9))
                                                
$letras.='ciento ';
                                            else
                                                
$letras.=(string)' ';
                                    }
                                
$valor=$valor-(intval($valor/100)*100);
                            }
            
                        
//Decenas
                        
if(($valor<100) and ($valor>9)){
                                if(
$valor<16){
                                        
$tempo=$this->decenas(intval($valor));
                                        
$letras.=$tempo;
                                        
$Numer =$valor-Intval($valor);
                                    }else{
                                        
$tempo=$this->decenas(Intval(($valor/10))*10);
                                        
$letras.=(string)$tempo;
                                        
$valor=$valor-(Intval(($valor/10))*10);
                                        if(
$valor>0.99)
                                            
$letras.=(string)' y ';
                                    }
                            }
            
                        
//Unidades
                        
if(($valor<10) And ($valor>0.99)){
                                
$tempo=$this->unidades(intval($valor));
                                
$letras.=(string)$tempo;
                                
$valor=$valor-intval($valor);
                            }
            
                        
//Decimales
                        
if($decimales<=0)
                            if((
$letras <> "Error en Conversi&oacute;n a Letras") and (strlen(trim($letras))>0))
                                
$letras .= (string) ' ';
                    return 
$letras;
                }
            }
        
/*
            Retorna el texto de el numero enviado como parametros
        */
        
function convertir($valor){
                
ob_start();
                
$tt $valor;
                
$valor intval($tt);
                
$decimales $tt intval($tt);
                
                
$decimales substr($decimales,strpos($decimales,'.'),3)*(100);
                
$decimalesround($decimales);

                
//Parte entera
                
print $this->evalua($valor);
                
                
//Parte Decimal
                
if($decimales){
                        print 
" $this->antes_con_despues ";
                        print 
$this->evalua($decimales);
                        print 
" $this->despues";
                    }else{
                        print 
" $this->antes_sin_despues ";
                    }
                return 
$this->resultado $texto ob_get_clean();
            }
    }
?>
y lo puedes utilizar asi:
Código PHP:
<?php
include( ABSPATH'/numerosALetras.class.php' ) ; 
$n = new numerosALetras 159 ) ;
echo 
$n -> resultado 
//ciento cincuenta y nueva
?>
Suerte.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
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 15:22.