Error al calcular el módulo de una división

177 views
Skip to first unread message

Miguel A.

unread,
Nov 17, 2013, 7:18:47 AM11/17/13
to publice...@googlegroups.com
Hola,
 
A ver si alguien me puede echar una mano con esto...
 
Tengo un valor que viene representado por 26 dígitos, de cuyo valor numérico tengo que calcular el módulo de la división con 97, para lo cual empleo la función MOD(miCC,97).
 
Si una variable numérica miCC la igualo al valor numérico de 26 dígitos funciona perfectamente, pero si esa variable la obtengo de una ristra de caracteres (números) no funciona da un valor absurdo totalmente. Por ejemplo
 
miCCC="00120345030000067890" && Es un número de cuenta, no puede ser de otra forma
miCC=VAL(miCCC)
El asunto empieza aquí porque el valor pasa a ser 120345030000067800,00
 
Pero se complica porque el módulo da el valor 0,00 que es absurdo debería ser un número entero, por ejemplo 0, o 64, que es realmente lo que debería de dar.
 
 

Fernando D. Bozzo

unread,
Nov 17, 2013, 7:44:12 AM11/17/13
to publice...@googlegroups.com
Hola Miguel:

Te convendría leer en la ayuda sobre "Numeric Data Type", donde explica las limitaciones, usando F1 o en este link:

http://msdn.microsoft.com/en-us/library/kkeyy55s%28v=vs.80%29.aspx


Saludos.-

Fernando D. Bozzo

unread,
Nov 17, 2013, 7:49:04 AM11/17/13
to publice...@googlegroups.com
Igualmente, los números de cuenta de banco no deben tratarse como números, sino como strings (cadenas), ya que con ellos no se hacen cálculos.

¿Por qué querés sacar el módulo de la división por 97 de un número de cuenta? Puede que sea mejor que en vez de indicar el problema específico con un pedacito de información, pongas el algoritmo completo de lo que necesitás hacer, y tal vez se encuentre otra solución.


Saludos.-


El domingo, 17 de noviembre de 2013 13:18:47 UTC+1, Miguel A. escribió:

mpulla

unread,
Nov 17, 2013, 7:54:35 AM11/17/13
to publice...@googlegroups.com
Hola Miguel.

Como dice Fernando, tu problema viene por las limitaciones que tiene VFP, esto ya se discutió en grupo, me parece que le dieron solución.

Una posible solución si usas un SGDB puedes hacer el cálculo un SP y este de devuelva el resultado.

Saludos.
Mauricio

Miguel A.

unread,
Nov 17, 2013, 8:32:54 AM11/17/13
to publice...@googlegroups.com
Hola Fernando,
 
Necesito sacar el módulo de 97 para determinar el IBAN.
Y, tenía entendido que las variables en VFP no se declaran con ningún tipo específico, si no es así corrígeme por favor, con que me digas cómo declaro que la variable xx es integer vale.
 
Un saludo,
Miguel A.

Miguel A.

unread,
Nov 17, 2013, 8:34:02 AM11/17/13
to publice...@googlegroups.com
Hola Mauricio,
 
Pues justamente por esa pregunto. ¿Sabes tú cuál es?.
Saludos,
Miguel A.

mpulla

unread,
Nov 17, 2013, 8:58:27 AM11/17/13
to publice...@googlegroups.com

Hola Miguel.

Fernando te dio un link.

En todo caso te paso parte de la ayuda de vfp.

Precisión numérica
La precisión numérica cuando almacena números de punto flotante en campos Numéricos, está limitada a 15 dígitos aproximadamente en Visual FoxPro. Por lo tanto, una precisión mayor que 15 dígitos podría perderse cuando se convierten números de decimal a binario

Saludos.
Mauricio

Fidel Charny

unread,
Nov 17, 2013, 8:58:51 AM11/17/13
to publice...@googlegroups.com
Miguel A.
Sin despegarme del comentario de Fernando, por ser domingo, día en el que uno puede preguntarse ¿por qué no?, en el adjunto hay una vcx que tiene una clase custom para realizar operaciones aritméticas sencillas con cadenas de dígitos. Devuelve un objeto "empty" con una matriz, objEmpty.gaResult[1] tiene el resultado y para el caso de la división, objEmpty.garesult[2] tiene el resto. En el método Opertex de la clase están las explicaciones.

La clase tiene la colaboración de Fernando Bozzo, al que le robé un par de ideas y algo de código.
Aunque esto es más o menos "Descargate mi grilla...", puedes hacer mal uso, quemarla, tirarla a la basura o ignorarla por completo. Y hasta puede que te sirva para algo...

Fidel.
mztoper._ZIP

Miguel A.

unread,
Nov 17, 2013, 10:50:49 AM11/17/13
to publice...@googlegroups.com
Gracias Fidel,
 
Voy a intentarlo con tu opción, aunque no entiendo muy bien como funciona.
 
Creía que esto sería más fácil.
 
Saludos,
Miguel A.
 

Fidel Charny

unread,
Nov 17, 2013, 11:25:51 AM11/17/13
to publice...@googlegroups.com
Miguel:
Suponiendo que agregas la librería mztoper.vcx/vct a tu proyecto;

miCCC="00120345030000067890"
lcDiv="97"
obj=NEWOBJECT("operar","mztOper")
objRet=obj.OPertext(miccc,lcDiv,"/",0)

?objRet.garesult[1]  obtiene:  lcResulta="1240670412371834"
?objRet.garesult[2]  obtiene:  lcResto="89"

obj=null
release obj,objRet

Miguel A.

unread,
Nov 17, 2013, 12:28:07 PM11/17/13
to publice...@googlegroups.com
Genial!!!!!!
 
Muchas gracias Fidel, ya lo he conseguido. Publicaré el asunto del IBAN en cuanto lo termine para los españoles que lo necesiten.
 
Saludos,
Miguel A.
Reply all
Reply to author
Forward
0 new messages