Transformar float en int?

Started by Buade, July 28, 2010, 11:46:25 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Buade

Hola de nuevo. Vengo con un problema que aparentemente ya solucione (en realidad no sé porque el código aún no se puede probar), pero no entiendo por qué compila de una forma y no de otra.

Creo que el problema esta al intentar pasar el X y el Y a un proceso como float, ¿Es necesario hacer alguna conversión?

El error del compilación es:
C:\Documents and Settings\Undercurrent\Escritorio\Varios\Fenix\Proyectos\Caum2\CaumMain.prg:142: error: Parameter type invalid ("X")

Si declaro el proceso antes de llamarlo, compila, pero si lo llamo antes de declarlo da ese error. A todos los demás procesos les da igual cuando los llamo y cuando los declaro xD

Quiza después tenga algún error de ejecución... no sé pq aún no puedo probarlo.

El header del proceso llamado:
[code language="bennu" options="singleline"]process disparo(byte jugador, byte tipo, int angulo, x, y)[/code]

El llamado es un lio de otras variables que no vienen al caso, además que está dentro de dos for, pero el problema esta en los parametros que tienen operaciones reales:
[code language="bennu"]
disparo(jugador, acciones[ac].parametroA,
         angulo + acciones[ac].parametro1 + (acciones[ac].parametro2*k),

         x + (<cosas enteras>) * cos(angulo), //Éste, por el coseno, y
         y + (<cosas enteras>) * sin(angulo)  //éste, por el seno.
       );
[/code]

Me pareció raro y pensé que quizá algo no ande en el futuro, además de que me di cuenta de como hacer que compile después de escribir más de la mitad del post y edite, asiq lo dejo jaj

Saludos :]

Rein (K´)ah Al-Ghul

las funciones coseno y seno, creo, devuelven un valor floar y tanto X como Y de los procesos son int, deberias poner solo la parte entera...
supongo q tendras q divirlo con "/" para obtenerla...
(con % se obtiene la parte no entera)

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

DjSonyk

Quote from: Rein (K´)ah Al-Ghul on July 30, 2010, 05:06:51 PM
(con % se obtiene la parte no entera)
No es cierto, se obtiene el resto,no los decimales o no enteros como has dicho , en 10/3...
resto=10;resto%=3 resultado resto=1 y no resto=0.333 ;

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Buade

Tenía razón, ahora que llegue al punto de probar esa parte, no anda :P.

Sin embargo en otros lugares pase resultados entre enteros y reales como parametro entero y anduvo, entonces pensé que quizá el problema estaba en que lo que marco como <cosas enteras> son en realidad de tipos byte y short, los cambié a int y anduvo, ¿bennu no soporta hacer esto con byte y/o short?

SplinterGU

existe el modulo mod_fmath que es el equivalente de mod_math pero trabaja con floats en vez de enteros.

ambas no deben ser usadas juntas, no se que pasa si se usan juntas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DjSonyk

Humm ,si el tema es por el titulo del hilo, hacer un casting de float a byte es una barbarie, ademas los resultados pueden ser inesperados ,sin embargo con short int no deverias tener problemas siempre que el resultado este en -32768 a 32767 ,aun asi te recomiendo que sigas el consejo de Splinter y te heches un vistazo el modulo mod_fmath...
Saludos.

Buade

A byte no, de float a int, o sea, redondear el número al int más cercano. Bueno no importa, si declaro el otro proceso arriba, compila, asique ya está :P