PDA

Ver la Versión Completa : Número de decimales al calcular variable


z3us
03/12/14, 17:03:11
Parece que tasker, cuando establecemos una variable mediante un cálculo, no permite que tenga más de tres decimales. Por ejemplo, dividir 3.141592 entre uno da 3.142 ¿ Hay alguna forma de cambiar esto?

iveumaos
03/12/14, 19:38:05
Yo lo arreglo multiplicando primero.
3.141592x1000=3141.592
Luego haces los cálculos que
quieras y finalmente la divides entre mil.
Si quisieras más precisión, por diez mil, cien mil, etc...

z3us
03/12/14, 20:16:58
Es que yo quiero tener cuatro decimales en el número de mi variable, no es para hacer cálculos, son coordenadas dd.dddd°
Me puedo apañar con tres, aunque pierdo algo de precisión, pero ya be surgió la duda de por qué eso es así

Caravantes
03/12/14, 22:55:47
no es para hacer cálculos, son coordenadas dd.dddd°

Supongo que lo que tienes a la izquierda del punto son grados, y lo que tienes a la derecha son 4 decimales de grado (décimas de grado, centésimas de grado, milésimas de grado, y diezmilésimas de grado). Por lo tanto no veo inconveniente alguno en aplicar la estrategia que te ha recomendado Iveumaos, a mí me parece la solución perfecta. Por ejemplo, si has visto que Tasker trabaja con 3 decimales y tú prefieres cuatro, puedes multiplicar primero por 10 y luego haces los cálculos.

[Editado: el siguiente párrafo es erróneo, está corregido en otro mensaje posterior]
Por otro lado, ¿sabes cuánta precisión estás perdiendo al despreciar el cuarto decimal? El tercer decimal (milésima de grado) equivale aproximadamente a un metro. El cuarto decimal equivale aprox a 10 centímetros. Me sorprendería que estuvieras manejando un problema real en el que la precisión de UN METRO no fura suficiente. Y supongo que la medición original (en grados) la obtienes del sistema GPS, que suele tener un margen de error muy superior a un metro. Por lo tanto, creo que no tiene mucho sentido que tus cálculos se esfuercen en conservar el cuarto decimal, que tiene una magnitud menor.

z3us
04/12/14, 00:13:51
No entiendo muy bien cómo hacer lo que decís. A ver, supongamos que tienes la variable %prueba , con el valor 12345 ¿Cómo haces para procesar esa variable para mostrar 1.2345 en una alerta Flash?
Sobre la precisión, según veo en el oruxmaps, el error máximo por redondeo del cuarto decimal (cinco diezmilesimas) equivale a cuarenta metros. Repito, no es algo que me importe para la tarea chorra que estoy creando, pero ya que me he encontrado con esto, sí me interesa saber cómo lidiar con ello para cuando realmente sí precise de ese cuarto decimal.
Gracias a ambos

Caravantes
04/12/14, 03:26:11
No entiendo muy bien cómo hacer lo que decís. A ver, supongamos que tienes la variable %prueba , con el valor 12345 ¿Cómo haces para procesar esa variable para mostrar 1.2345 en una alerta Flash?

Bueno, de primeras se me ocurre un sistema, utilizando varias acciones y varias variables. Se trata de dividir la variable por 10000 (por ejemplo) para obtener la parte entera de esa división y despreciar (floor) los decimales resultantes de la división; se guarda esa parte entera en una variable. Luego se vuelve a coger la variable inicial para separarla en trozos, usando como separador la parte entera que hemos obtenido antes: el resultado será que ahora obtenemos los cuatro dígitos decimales y se guarda en otra variable. Luego se trata de mostrar (de un solo golpe) la parte entera, seguida de un punto y seguida de la parte decimal.

He probado la tarea siguiente, creo que funciona bien y saca tres flashes. El primer flash muestra la parte entera, el segundo flash muestra la parte decimal y el tercer flash muestra todo el conjunto: la parte entera, el punto y la parte decimal.

-Establecer variable %prueba a 12345
-Establecer variable %entero a floor(%prueba/10000)
-Flash %entero
-Separar variable %prueba separador %entero
-Flash %prueba2
-Flash %entero.%prueba2

El último Flash muestra "1.2345" como pedías.
He comprobado que también funciona con otros valores como 345678, resultando 34.5678 , etc.

Sobre la precisión, según veo en el oruxmaps, el error máximo por redondeo del cuarto decimal (cinco diezmilesimas) equivale a cuarenta metros.

Tienes mucha razón, me equivoqué en mis cálculos iniciales, y por bastante (factor 100). Un círculo máximo (ecuador/meridiano) tiene 360 grados y equivale a unos 40.000 kilómetros. El resto son cálculos sencillos: un grado equivale a unos 111 kilómetros, etc. Según las cuentas que he hecho ahora, esas cinco diezmilésimas de grado equivalen a unos 55 metros, aproximadamente, y yo diría que a grosso modo coincide con esa referencia que tú tienes, los 40 metros.

Ahora empiezo a pensar lo contrario, que cuarenta o cincuenta metros son demasiada imprecisión. Pero claro, todo depende de lo que vayas a hacer con eso. Ya nos contarás con detalle en qué estás enredando. Pica la curiosidad.