|
||
|
![]() |
![]() |
Tasker Para hablar de todo lo relacionado con la aplicación tasker |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Error de cálculo en Tasker
¿Alguien tiene la solución para corregir el error que produce Tasker al dividir un número de 26 dígitos por otro de dos? El resto de la división es siempre incorrecto. Probablemente dicho error sea producido porque realiza la operación en formato de "notación científica"... Ejemplo: 12345678901234567890123456%97 da un resto de 13 cuando el valor verdadero es 56.
Última edición por ea8rx Día 17/01/18 a las 19:45:43. |
|
#2
|
||||
|
||||
Tasker usa las librerías MathEval de Lawrence PC Dol ...
http://www.softwaremonkey.org/Code/MathEval http://tech.dolhub.com/Code/MathEval Intenta contactar con el autor para que te confirme si el problema puede ser cosa de su librería o de la implementación del autor de Tasker. O contacta con Pen (autor de Tasker) en su foro de soporte ... https://groups.google.com/forum/#!forum/tasker
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
#3
|
||||
|
||||
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
#4
|
||||
|
||||
¿Te importaría explicarnos qué tipo de tarea necesita hacer esa división? Gracias.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
|
#5
|
||||
|
||||
Pues 26 dígitos son los que hay que procesar para obtener los dos dígito del IBAN. Ejemplo:
Nª de Cuenta Corriente: 12345678901234567890 El IBAN de esta cuenta sería: ES56 (ES=España y 56 dígitos de control). Al final el Nº de cuenta sería: ES56 1234 5678 9012 3456 7890 Ese 56 se calcula de la siguiente manera: La E tiene un valor=14 y la S=28. Ahora se añade 142800 a los 20 dígitos de la cuenta quedando un número de 26 dígitos, en este caso: 12345678901234567890142800. Este número se divide por 97 y el resto (no el cociente) se resta de 98 y nos da los dígitos de control que siguen a ES. Si el dígito fuera < 10 se le pone un 0 delante. En Tasker la operación sería: 98-12345678901234567890142800%97 debiendo dar como resultado 56 (en este ejemplo) pero da 13. Si se hace con la acción de JavaScriptlet sucede lo mismo. Como dije antes, creo que la mayoría de las calculadoras y sistemas usan notación exponencial y por lo tanto, al trabajar con decimales se produce este error. Hay docenas de páginas de bancos que calculan on-line el iban de cualquier cuenta pero yo quiero hacerme una tarea local. He encontrado una calculadora en Play que lo hace bien pero no es lo que busco. Por cierto, el algoritmo de cálculo es diferente en los demás países europeos. Edito: aquí lo explicac mejor que yo... http://www.calculariban.com/CalculoI...lculoIBAN.html Última edición por ea8rx Día 31/10/17 a las 12:36:44. |
Gracias de parte de: | ||
#6
|
||||
|
||||
Confirmado, en la web tienes toneladas de funcionas JS que calculan el IBAN.
También he dado con una API fabulosa que hace eso y mucho más ... https://es.iban.com/calculation-api.html ... pero es de pago, aunque te dejan hacer pruebas gratuitas durante un mes.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
#7
|
||||
|
||||
Confirmado, en la web tienes toneladas de funcionas JS que calculan el IBAN.
También he dado con una API fabulosa que hace eso y mucho más ... https://es.iban.com/calculation-api.html ... pero es de pago, aunque te dejan hacer pruebas gratuitas durante un mes. ![]() Gracias por tu interés y por la información de esa API pero es mucho lío ya que lo que yo pretendía era hacer una tarea de una o dos líneas para calcular esos dígitos ya que para algunas cosas te piden sólo el número de cuenta pero para otras te piden el IBAN. Ya he encontrado una calculadora científica que lo hace correctamente. Por otra parte el desarrollador de Tasker me ha dicho que él no puede hacer nada porque trabaja con el motor JavaScriptlet de Google que es quien no puede o no quiere manejar ese tipo de operaciones. Por mi parte el administrador puede cerrar este hilo. Gracias a todos. |
#8
|
||||
|
||||
![]() Con JavaScript puede ser. Tirando de un API también puede ser. Con acciones de Tasker ya te digo que es imposible. Y lo que dices que te ha contado Pent sobre "el motor JavaScriptlet de Google", debe tratarse de un mal entendido. Según la documentación de Tasker los cálculos se hacen usando la librería MathEval que te he comentado antes, no usando JS. Y lo del JavaSccriptlet es una acción de Tasker, no un motor JS. En fin, una pena que des el tema por cerrado. La tarea era interesante. ![]()
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
#9
|
||||
|
||||
![]() Con JavaScript puede ser. Tirando de un API también puede ser. Con acciones de Tasker ya te digo que es imposible. Y lo que dices que te ha contado Pent sobre "el motor JavaScriptlet de Google", debe tratarse de un mal entendido. Según la documentación de Tasker los cálculos se hacen usando la librería MathEval que te he comentado antes, no usando JS. Y lo del JavaSccriptlet es una acción de Tasker, no un motor JS. En fin, una pena que des el tema por cerrado. La tarea era interesante. ![]() ![]() Esta es la última respuesta que me dió el desarrollador de Tasker: If Google's Javascript engine can't handle it, then I have no other possibilities to offer, sorry. Tal vez yo no la traduje muy bien... En cualquier caso, tengo una calculadora https://play.google.com/store/apps/d...calc.pro&hl=es donde calculo el IBAN correcto en UNA sóla línea... Sólo tienes que poner esto (las x son el número de tu cuenta): 98-xxxxxxxxxxxxxxxxxxxx142800MOD97 Sólo con esta línea esa calculadora te da correctamente los dos dígitos del IBAN que siguen a ES. Esa línea se puede escribir (y lo he probado) en una variable de Tasker y/o en una variable de JavaScriptlet pero en ambos casos el resultado es erróneo. Un saludo. |
#10
|
||||
|
||||
La cosa en JavaScriptlet sería algo así: var numeros=98-xxxxxxxxxxxxxxxxxxxx142800%97
En Tasker sería establecer una variable %numero=98-xxxxxxxxxxxxxxxxxxxx142800%97 ambas opciones dan el mismo resultado pero INCORRECTO. Lo cierto es que soy nuevo en Tasker pero lo poquito que voy aprendiendo es seguro. Un saludo. |
#11
|
||||
|
||||
![]() Lo que te ha dicho es que si no puedes solucionarlo tirando de motor JavaScript él no te puede ofrecer otra posibilidad. Bastante lejos de ... ... él no puede hacer nada porque trabaja con el motor JavaScriptlet de Google que es quien no puede o no quiere manejar ese tipo de operaciones ... ![]() Pensaba que con "líneas" te referías a "acciones" de Tasker. ![]() Vale, dejando al un lado lo mal que te has explicado y lo igualmente mal que te he entendido... ![]() En JavaScript el entero más grande que se puede manejar es 9.007.199.254.740.990 (2^53) que tiene 16 cifras. Seguramente esa "limitación" afecta a más lenguajes de programación. A pesar de eso es posible calcular el módulo de un número mayor (que es lo que necesitabas en este caso) pero no directamente. Tendrías que usar alguno de los "trucos" que se pueden encontrar en la web. Por cierto, una calculadora espectacular ... 100 dígitos. ![]()
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
#12
|
||||
|
||||
ea8rx ha comentado este mismo problema en telegram y le he encontrado una solución, sin utilizar javascript, que expongo aquí para que sirva a otros.
La ídea es que si tasker sólo me deja trabajar con 17 dígitos pues dividamos el problema, exactamente en 2. Al final de cuentas la idea es igual a como cuando dividimos a mano. Entonces si parto de un número de 24 dígitos lo divido en 2 partes de 12 dígitos que tasker ya puede manejar. Entonces: - del número cogemos los 12 más significativos y le aplicamos el mod 97 y obtenemos el resto. - este se lo añadimos (no sumamos) a los 12 menos significativos con lo que obtenemos un número de 14 dígitos, es decir, quedaría restoxxxxxxxxxxxx siendo x's los dígitos menos significativos mencionados. - A este número de 14 dígitos le aplicamos el mod 97 y tendremos el resto final a aplicar ya al calculo de código de control (98-resto) Un saludo. |
Los siguientes 2 usuarios han agradecido a Xcso su comentario: | ||
#13
|
||||
|
||||
Más o menos eso es lo que hacen en casi todas las soluciones con JS que he visto.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
#14
|
||||
|
||||
ea8rx ha comentado este mismo problema en telegram y le he encontrado una solución, sin utilizar javascript, que expongo aquí para que sirva a otros.
La ídea es que si tasker sólo me deja trabajar con 17 dígitos pues dividamos el problema, exactamente en 2. Al final de cuentas la idea es igual a como cuando dividimos a mano. Entonces si parto de un número de 24 dígitos lo divido en 2 partes de 12 dígitos que tasker ya puede manejar. Entonces: - del número cogemos los 12 más significativos y le aplicamos el mod 97 y obtenemos el resto. - este se lo añadimos (no sumamos) a los 12 menos significativos con lo que obtenemos un número de 14 dígitos, es decir, quedaría restoxxxxxxxxxxxx siendo x's los dígitos menos significativos mencionados. - A este número de 14 dígitos le aplicamos el mod 97 y tendremos el resto final a aplicar ya al calculo de código de control (98-resto) Un saludo. ![]() Probado tu método confirmo el correcto funcionamiento. Gracias a todos por vuestro interés y aportes de soluciones valiosas. |
Gracias de parte de: | ||
![]() |
![]() |
||||||
|