Ya tengo bastante el pseudocódigo o como se llame para usar strings:
Código:
ActCifras = Contar cifras de Act
Si ActCifras > ActDec
Insertar "." en Act (debo ver en qué parte).
sino si ActCifras == ActDec
Act = Convertir a número("0."+Act)
sino (o sea si ActCifras < ActDec)
Act = Convertir a número("0."+(Diferencia)"0"s+Act)
Pero antes de empezarlo a convertir en código analicé un poco más lo que tenía.
Esto:
Código a:
Ver originalAct = 0;
ActDec = 1;
do {
Precision = Math.pow(10, ActDec);
Act1 = Act*Precision;
Act2 = Act1+1;
Act3 = Math.floor(Act2);
Act = Act3/Precision;
trace (Act1+" , "+Act2+" , "+Act3+" , "+Act);
} while (Act<0.9);
if (Act>0.9) {
trace ("Sí");
}
Me da esto:
Cita: 0 , 1 , 1 , 0.1
1 , 2 , 2 , 0.2
2 , 3 , 3 , 0.3
3 , 4 , 4 , 0.4
4 , 5 , 5 , 0.5
5 , 6 , 6 , 0.6
6 , 7 , 7 , 0.7
7 , 8 , 8 , 0.8
8 , 9 , 9 , 0.9
Sí
Curiosidad enorme:
Precision es 10. Pero si cuando lo uso para dividir le pongo 10 en vez de Precision, el do while (¿bucle?) no termina, se repite esto:
3 , 4 , 3 , 0.3
Si uso Precision en la división y round en vez de floor, el bucle termina como el otro, el mismo error.
Si uso 10 en la división y round en vez de floor, no hay error.
Pero claro la precisión variará, yo no puedo poner 10 porque podría deber ser 100 en otro caso.
Por otro lado, con esto:
Código a:
Ver originalAct = 0;
ActDec = 1;
do {
Act1 = Act*(Math.pow(10, ActDec))+1;
Act = Act1/10;
trace (Act1+" , "+Act);
} while (Act<0.9);
if (Act>0.9) {
trace ("Sí");
}
Me muestra esto:
Cita: 1 , 0.1
2 , 0.2
3 , 0.3
4 , 0.4
5 , 0.5
6 , 0.6
7 , 0.7
8 , 0.8
8.99999999999999 , 0.899999999999999
9.99999999999999 , 0.999999999999999
Sí
O sea... entiendo que no usé round, pero al principio tampoco, y sin embargo con este código me muestra muchos decimales y con los otros códigos no ¿por qué será?