Ver Mensaje Individual
  #13 (permalink)  
Antiguo 07/09/2015, 15:21
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con decimales.

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 original
  1. Act = 0;
  2. ActDec = 1;
  3. do {
  4.     Precision = Math.pow(10, ActDec);
  5.     Act1 = Act*Precision;
  6.     Act2 = Act1+1;
  7.     Act3 = Math.floor(Act2);
  8.     Act = Act3/Precision;
  9.     trace (Act1+" , "+Act2+" , "+Act3+" , "+Act);
  10. } while (Act<0.9);
  11. if (Act>0.9) {
  12.     trace ("Sí");
  13. }
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
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 original
  1. Act = 0;
  2. ActDec = 1;
  3. do {
  4.     Act1 = Act*(Math.pow(10, ActDec))+1;
  5.     Act = Act1/10;
  6.     trace (Act1+" , "+Act);
  7. } while (Act<0.9);
  8. if (Act>0.9) {
  9.     trace ("Sí");
  10. }
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
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á?