Estoy en una aplicación WebForm en VB.NET y me preguntaba si existía una función interna en la que enviándole dos números haga lo siguiente:
rellenaCeros (14,4) = 0014
Saludos!!

| ||||
Vaya, es verdad. No he puesto lo que quería que hiciera. 14 es ún número entero cualquiera y 4 es el número de caracteres que deseo que tenga la cadena en total.^ Así que si a la función le llega un 14 (tiene 2 caracteres numéricos) por un lado y un 4 que le indica que tiene que ser una cadena con 4 número el resultado es 0014 (4 caracteres) Tal como pongo en el título, símplemente es rellenar de ceros a la izquierda hasta llegar al número de caracteres que indique la función. Ejemplos: (312,8) = 00000312 (9,2) = 09 (9,1) = 9 (99,1) = error Creo que está claro. ![]()
__________________ Tantas horas delante de una pantalla servirá para algo.... [Phoncadiz; mínimo 8 h. al día con el PC] :stress: |
| ||||
Si lo haces con unos if's y manejando los ceros, puedes realizar el relleno de ceros... num=14 relleno=4 long=len(num) if relleno<>long then rellenar end if completalo y veras que te sale... saludos
__________________ Saludos desde el corazón de América.....BOLIVIA Da lo mejor de ti, que siempre será recompensado |
| ||||
Te paso un ejemplo de como te quedaría: Cita: Y para llamarla:Private Function GetZeros(ByVal iNum As Integer, ByVal iLimit As Integer) As String Dim iLength As Integer = iNum.ToString.Length Dim s As String If iLength < iLimit Then For i As Integer = 1 To iLimit - iLength s += "0" Next s += iNum.ToString Else s = "Error" End If Return s End Function Cita: Response.Write(GetZeros(312, 9)) Salu2
__________________ Nadie roba nada ya que en la vida todo se paga . . . Exentrit - Soluciones SharePoint & Net |
| ||||
Muchas gracias a todos los que habeis participado. Ya se que podía implementarla. Pero era para ahorrarme trabajo si es que existía o incluso si se podría realizar en una sola línea de código uniendo un par de funciones de las de toda la vida. ![]() De todas formas... un millón de gracias!!! ![]()
__________________ Tantas horas delante de una pantalla servirá para algo.... [Phoncadiz; mínimo 8 h. al día con el PC] :stress: |
| |||
Para quien lo quiera para VC++ o una DLL para llamar y que sea rápido, he hecho una función estilo a las ANSI-C en inline ASM...
Código:
Ese ejemplo devuelve lo que se espera:#include <stdio.h> #include <stdlib.h> #include <string.h> /******************************************* * Rellena con ceros a la izquierda - MaxExtreme * **** Argumentos **** * numero - Número origen al que se añadirán ceros * destino - Puntero donde se guardará el resultado * cifras - Cifras totales que tendrá la string destino * **** Devuelve **** * ret==0 OK * ret!=0 ERROR ******************************************/ int Rellenar(int numero, char * destino, int cifras) { static char buffer[11]; __asm { pusha lea edx, buffer push 10d push edx push numero call itoa add esp, 0Ch push eax call strlen pop edx mov ebx, destino mov ecx, cifras mov byte ptr [ebx+ecx], 0h sub ecx, eax mov edx, ecx cmp eax, cifras jg error je igual ceros: mov byte ptr [ebx+ecx-1], 30h loop ceros igual: add ebx, edx mov ecx, eax lea edx, buffer num: mov al, byte ptr [edx+ecx-1] mov byte ptr [ebx+ecx-1], al loop num popa mov eax, 0h jmp fin error: popa mov eax, 1h fin: } } void main() { // Rellenamos parte de la cadena para comprobar que se incluye el terminador \0 char destino[100]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Rellenamos con el número 12345 con 10 cifras -> OK if(Rellenar(12345,destino,10)==0) printf("%s\n",destino); else printf("Error\n"); // Rellenamos con el número 12345 con 5 cifras -> OK if(Rellenar(12345,destino,5)==0) printf("%s\n",destino); else printf("Error\n"); // Rellenamos con el número 12345 con 3 cifras -> ERROR if(Rellenar(12345,destino,3)==0) printf("%s\n",destino); else printf("Error\n"); }
Código:
No sé si se puede optimizar más, pero ahí queda como curiosidad... 0000012345 12345 Error ![]() ** EDIT: pops sustituidos por add dado que itoa devuelve el puntero que se le pasa y por lo tanto lo tenemos en eax para hacer push a strlen sin usar edx - Eternal Idol Última edición por MaxExtreme; 02/06/2005 a las 14:01 |