En la 1era vuelta que muestre 1, es decir un número entero.
En la 2nda vuelta que muestre 2 y 0.1, es decir un número entero y un número con 1 decimal.
En la 3era vuelta que muestre 3, 0.2 y 0.01, es decir un número entero, uno de 1 decimal, y uno de 2 decimales.
Los números deben ser siempre mayores a los anteriores de su tipo y deben tener la cantidad de decimales que corresponde, si tiene menos no debe mostrarse en pantalla.
Logré que los números se generen pero no estoy pudiendo lograr que sólo se muestren los diferentes.
Este es el código que tengo:
Código
Escena 1 actions for fotograma 1 MaxDecimales = 0; N1 = 0; actions for fotograma 2 Decimales = 0; actions for fotograma 3 Nombre = "N"+Decimales; N = (eval(Nombre)*Math.pow(10, Decimales)+1)/Math.pow(10, Decimales); // Guardar el valor en la lista correspondiente. set (Nombre, N); if (Decimales>0) { LargoMinimodeDiferencia = Decimales+2; } else { LargoMinimodeDiferencia = Decimales+1; } if (String(N-Math.floor(N)).length>=LargoMinimodeDiferencia) { // El valor no fue producido, se muestra y se chequea. trace ("Se generó "+Nombre+": "+N); } actions for fotograma 4 if (Decimales<MaxDecimales) { Decimales = Decimales+1; gotoAndPlay (3); } else { // Se creará una nueva lista con decimales más pequeños. MaxDecimales = MaxDecimales+1; set ("N"+MaxDecimales, 0); gotoAndPlay (2); }
Salida:
Citar
Se generó N0: 1
Se generó N0: 2
Se generó N1: 0.1
Se generó N0: 3
Se generó N1: 0.2
Se generó N2: 0.01
Se generó N0: 4
Se generó N1: 0.3
Se generó N2: 0.02
Se generó N3: 0.001
Se generó N0: 5
Se generó N1: 0.4
Se generó N2: 0.03
Se generó N3: 0.002
Se generó N4: 0.0001
Se generó N0: 6
Se generó N1: 0.5
Se generó N2: 0.04
Se generó N3: 0.003
Se generó N4: 0.0002
Se generó N0: 7
Se generó N1: 0.6
Se generó N2: 0.05
Se generó N3: 0.004
Se generó N4: 0.0003
Se generó N5: 0.00002
Se generó N0: 8
Se generó N1: 0.7
Se generó N2: 0.06
Se generó N3: 0.005
Se generó N4: 0.0004
Se generó N5: 0.00003
Se generó N0: 9
Se generó N1: 0.8
Se generó N2: 0.07
Se generó N3: 0.006
Se generó N4: 0.0005
Se generó N5: 0.00004
Se generó N0: 10
Se generó N1: 0.9
Se generó N2: 0.08
Se generó N3: 0.007
Se generó N4: 0.0006
Se generó N5: 0.00005
Se generó N0: 11
Se generó N1: 1
etc
Como pueden ver, al final se muestra el 1, que fue el 1er número, por lo que no debería mostrarse. Hay números que no se muestran pero eso lo analizaré más adelante. Parece evidente que falla esto:Se generó N0: 2
Se generó N1: 0.1
Se generó N0: 3
Se generó N1: 0.2
Se generó N2: 0.01
Se generó N0: 4
Se generó N1: 0.3
Se generó N2: 0.02
Se generó N3: 0.001
Se generó N0: 5
Se generó N1: 0.4
Se generó N2: 0.03
Se generó N3: 0.002
Se generó N4: 0.0001
Se generó N0: 6
Se generó N1: 0.5
Se generó N2: 0.04
Se generó N3: 0.003
Se generó N4: 0.0002
Se generó N0: 7
Se generó N1: 0.6
Se generó N2: 0.05
Se generó N3: 0.004
Se generó N4: 0.0003
Se generó N5: 0.00002
Se generó N0: 8
Se generó N1: 0.7
Se generó N2: 0.06
Se generó N3: 0.005
Se generó N4: 0.0004
Se generó N5: 0.00003
Se generó N0: 9
Se generó N1: 0.8
Se generó N2: 0.07
Se generó N3: 0.006
Se generó N4: 0.0005
Se generó N5: 0.00004
Se generó N0: 10
Se generó N1: 0.9
Se generó N2: 0.08
Se generó N3: 0.007
Se generó N4: 0.0006
Se generó N5: 0.00005
Se generó N0: 11
Se generó N1: 1
etc
Código:
if (Decimales>0) {
LargoMinimodeDiferencia = Decimales+2;
} else {
LargoMinimodeDiferencia = Decimales+1;
}
if (String(N-Math.floor(N)).length>=LargoMinimodeDiferencia) {
Al escribir eso lo que pensé es que si al número le resto él mismo pero entero, entonces si no tenía decimales el largo del resultado será 1, y sino 3 como mínimo, ya que los números más cortos serían 0.1, 0.2, etc, es decir en el caso de no tener decimales el largo resultante es decimales(0)+1, y en el caso de tenerlos es decimales+2. Si tiene 1 decimal el resultado debería ser 3, si tiene 2 entonces 4, etc.
Pero no funciona.
Ahora al poner más salidas veo esto:
N: 1
N-Math.floor(N): 2.22044604925031e-16
String(N-Math.floor(N)): 2.22044604925031e-16
String(N-Math.floor(N)).length): 20
¿Qué condición puedo poner para que distinga si el número cumple las condiciones o no?
Una posibilidad es compararlo con los números antes generados pero eso parece absurdo porque supongo que debe haber un modo más fácil.
¿Por qué 1-floor(1) resulta un decimal? ¿N no es 1? Pero dice 1. Es el resultado de 0.9+0.1, así que podría ser algo aproximado, pero si dice 1 se supone que es 1. Y si no es 1 ¿qué hago? En este caso serviría redondearlo, pero si tengo 0.09999 y se supone que es 0.1 pero ese es repetido entonces no puedo simplemente redondearlo porque queda en 0 y no quiero ese número sino 0.1 (auque no debe mostrarse en pantalla). ¿Lo multiplico por 10^Decimales antes de redondearlo? No entiendo bien si debo redondearlo siempre o no.
Probablemente lo más sencillo sea trabajar con enteros y en el momento de mostrarlos en pabntalla agregarles 0. y cierta cantidad de 0s delante.
¿Otras ideas, info, etc?