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!!

|
|
#1 (permalink) |
![]() Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 207
|
Relleno de ceros a la izquierda
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!! ![]()
__________________
Tantas horas delante de una pantalla servirá para algo.... [Phoncadiz; mínimo 8 h. al día con el PC] :stress: |
|
|
|
|
|
#3 (permalink) |
![]() Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 207
|
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: |
|
|
|
|
|
#5 (permalink) |
![]() Fecha de Ingreso: agosto-2003
Ubicación: La Paz - Bolivia
Mensajes: 206
|
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 |
|
|
|
|
|
#6 (permalink) |
|
Moderador
![]() ![]() |
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 . . . |
|
|
|
|
|
#7 (permalink) |
![]() Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 207
|
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: |
|
|
|
|
|
#8 (permalink) |
![]() Fecha de Ingreso: abril-2005
Mensajes: 3.083
|
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-jun-2005 a las 14:01. |
|
|
|