FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Aportación del código de un stored procedure para conversión literal de números
Un saludo a todos.
Aunque soy un veterano del Club Delphi apenas tengo intervenciones, puesto que me limito a pasarme de vez en cuando y leer los mensajes, y alguna vez he preguntado algo. En este momento estoy migrando una aplicación desde FB 1.5 a 2.5.1 en Linux, por lo que me he tenido que plantear la migración de una librería UDF de mi propiedad a linux, recompilandola con Lazarus. Esto me hizo plantearme la conveniencia de seguir por ahí o portar toda esta librería a procedimientos almacenados, puesto que FB 2.5 es un tanto pijotero y estricto, sobre todo con los strings. Mi conclusión ha sido que migraré en su totalidad a procedimientos almacenados, puesto que FB 2.5 trae una buena colección de funciones internas, que facilitan dicha labor. Como parte de dicha migración he concluido un procedimiento, que se basa a su vez en otro que permite conocer el literal de cualquier número, positivo o negativo, entero o fraccionario, con una determinada precisión (no mayor que 6). Para ello hay dos procedimientos: 1º IUDF_NUMERAL, que admite como parámetro un número entero positivo y devuelve el literal. Este es recursivo, y permite con las cadenas básicas componer cualquier número. 2º IUDF_NUMLITERAL, utiliza el anterior, y permite la entrada de cualquier número decimal de hasta precisión 6, y un parámetro que ajustará la precisión de salida. La salida es un número, positivo o negativo, entero o fraccionario, con la precisión solicitada, en formato literal. Ahí va un script con el código:
Si hay algo erróneo, por favor hacérmelo saber, en todo caso, que os resulte de provecho. Un saludo. |
#2
|
||||
|
||||
Gracias por compartirlo
|
#3
|
||||
|
||||
Muchas gracias por tu aporte birmain.
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#4
|
||||
|
||||
Excelente aporte.
Gracias.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
||||
|
||||
Excelente aportación.
Muchas gracias.
__________________
Guía de Estilo de los Foros Cita:
|
#6
|
||||
|
||||
Que curioso.
Le he tenido que quitar los acentos a los comentarios para que me acepte crear los procedimientos almacenados. Aparte de eso, parece funcionar perfectamente. Gracias de nuevo por la aportación, Fernando.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#7
|
|||
|
|||
Acentos y otras cosas.
Hola Marc, creo que el tema de los acentos en los comentarios se debe al juego de caracteres con que tengas definida la base de datos. A mi me dio problemas este asunto en la migración. Una vez migrado, fijando la metadata con el modificador corespondiente en GBak no me ha causado mas problemas. El conjunto de caracteres que tengo definido es ISO8859_1.
Por otra parte quiero decirte que en ocasiones he leído algunos comentarios tuyos, y veo que tienes una gran orientación didáctica, puesto que no pierdes ocasión de explicar las cosas ayudando a la gente. Te diré que una de las opiniones que más sopesé para pasar todas mis UDF a stored procedures es la tuya, que la he visto reflejada en varios post muy bien argumentada. Estoy contento de haberlo hecho, pero era muy tentador hacer una dll en pascal cuando uno no dominaba aún la esencia de los stored procedures. Espero mantener conversaciones mas a menudo con vosotros, de los que estoy muy agradecido. Un saludo. |
#8
|
|||
|
|||
Edad actual
Calcula la edad de una persona tal y como está convenido socialmente. (Hasta el cumpleaños no se incrementa la edad)
|
#9
|
|||
|
|||
Corrección de bug
Pongo la corrección de un detalle, en el procedimiento IUDF_NUMLITERAL.
El problema se causa cuando hay una entrada decimal, p. ejemplo de prec 2, y esta termina en cero. Ejemplo: 14.20. La salida es: CATORCE CON DOS, en vez de CATORCE CON VEINTE. Solución: Realizar el cambio siguiente
|
#10
|
|||
|
|||
Como después he corregido algunos detalles que afectan a los dos procedimientos, pongo a continuación el código de ambos, que ya creo está libre de bugs.
No tengais en cuenta mi anterior post, ya que la solución al problema era algo mas elaborada
|
#11
|
|||
|
|||
Conversion de Numeros a Letras... en Delphi
Buen dia
Gracias por la ayuda, el codigo que enviastes, logre ejecutarlo pero sigo igual no me convierte los centavos ejemplo (125.10), solo me convierte... CIENTO VEINTICINCO... lo que necesito es que me diga.. Ciento Veinticinco con 10 Centavos..... si me envias ese mismo codigo con esas modificaciones saludos gracias |
#12
|
|||
|
|||
Esta con error, conversion de numeros a letras
Estimado gracias por tu ayuda, pero ahora ya no convierte a letras todos los numeros, ejemplo 1425.50, solo convierte
MIL...esto despues de cambiar la linea.. if (prec > 6) then prec = 2 lo demas no ignora saludos |
#13
|
||||
|
||||
Hola sam123.
Es curioso... A mi me funciona correctamente, al ejecutar:
Obtengo el resultado: Cita:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 16-07-2015 a las 19:15:34. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Stored Procedure | gluglu | Conexión con bases de datos | 16 | 24-02-2011 17:41:24 |
Aportacion Funcion para calcular dias : DaysForDate | bitbow | Varios | 1 | 08-11-2010 20:49:24 |
Conversion de números | donald shimoda | Varios | 7 | 07-10-2008 19:57:48 |
Stored Procedure genera codigo | Carlos Hurtado | Firebird e Interbase | 2 | 19-10-2005 19:38:19 |
Stored Procedure | tgsistemas | SQL | 1 | 27-02-2004 13:10:33 |
|