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

Cita:
Iniciado por agleiva Ver Mensaje
Googleando rápidamente (otra habilidad muy necesaria para ser programador)
Vale, si eso es cierto entonces soy un mal programador...

Código ActionScript:
Ver original
  1. var setPrecision:Function = function(number:Number, precision:int) {
  2.  precision = Math.pow(10, precision);
  3.  return Math.round(number * precision)/precision;
  4. }
Buena idea, Math.round recuerdo que hace tiempo preferí no usarlo, no sé bien por qué pero probablemente que era poco confiable en el sentido de que no se sabe bien si baja o sube el número. Ayer probé esto:
Código a:
Ver original
  1. Act = 0;
  2. ActDec = 1;
  3. do {
  4.     Act = (Math.floor((Act*(Math.pow(10, ActDec))+1)))/(Math.pow(10, ActDec));
  5.     trace (Act);
  6. } while (Act<0.9);
  7. if (Act>0.9) {
  8.     trace ("Sí");
  9. }

Math.floor es similar a round, quita los decimales pero sin el riesgo de que el número aumente.

Pero no, no funciona, al final aparece el Sí marcando que Act>0.9 a pesar de que el último número que muestra la pantalla es 0.9. Sin duda el programa que usás es mejor en ese sentido porque te muestra los números que realmente son. Capáz que acá se puede también, creando un texto dinámico en la pantalla, pero como trace es más rápido de hacer...

Por cierto he probado round con eso y tampoco funciona ¿lo implementé mal?

Código b:
Ver original
  1. Act = 0;
  2. ActDec = 1;
  3. do {
  4.     Precision = Math.pow(10, ActDec);
  5.     Act = Math.round(Act*Precision+1)/Precision;
  6.     trace (Act);
  7. } while (Act<0.9);
  8. if (Act>0.9) {
  9.     trace ("Sí");
  10. }

Nop... sigue apareciendo el Sí.

Cita:
Hay otros comentarios, por ejemplo uno que dice que esta misma función fue incorporada en ActionScript 3.0, con lo cuál deberías poder usarlo, si al menos estuvieras en una versión más actualizada de esa plataforma.
Y sino también, si me acabas de dar la versión "vieja". ¿O no?

Si no lo has hecho y te interesa, fijate cómo "incorporaron" el fscommand save a partir de Flash 6 o lo que sea -en el 8 no está, y no hablo de Adobe-.

Y me hiciste acordar esto:
http://sofosagora.net/offtopic-gener...0.html#p114949
xD

Cita:
Que traducido es algo así como:
Así que para todos lo que estén en finanzas, NUNCA USEN FLEX NI FLASH para computar daros. En serio muchachos. NO usen esa technología. Es lo peor que alguna vez existió en el mundo.
Buena traducción. A mí ya no me llaman la atención las exageraciones, al contrario, me aburren.

Cita:
Curioso no?
Nah... es muy común.

Cita:
usando F# podemos reemplazar ese while horrible y procedural por un for sobre un literal de lista, quitar la variable mutable, y cambiar el Console.WriteLine por printf:
Eso me da curiosidad ¿por qué dices que el while es horrible? Yo el for nunca lo entendí, es decir, siempre me pareció más complicado que el "dow" pero muy similar, así que le dediqué muy poca atención.

...

Bueno, hoy he estado pensando en hacer la división entre 10 mediante strings, o sea mover el . hacia la izquierda y agregar la cantidad debida de 0s. No he podido idear el código para eso, quizá porque estaba confundido -largo de explicar-, pero me aclaré ya -creo-.

Esta tabla muestra el resultado (NewAct) dependiendo de otras 2 variables (Act y ActDec):
(Nota: N significa "cualquier valor").
Act_____ActDec_____NewAct
0_________N__________0

N_________0__________N

0.1_______1__________0.01
2_________1__________0.2
30________1__________3
El . se mueve 1 lugar hacia la izquierda.

0.1_______N__________...
2_________N__________...
30________N__________...
El . se mueve N lugares hacia la izquierda.

Eso ¿cómo sería el código para eso? Aunque haya una solución más fácil quisiera saber esta respuesta también, por curiosidad. Voy a pensarlo.