terça-feira, março 31, 2009

Ponto flutuante sem float

Após analisar o J2ME (na verdade já mexi faz muito tempo com J2ME, foi uma relembrança!), especificamente usando o CLDC 1.0, percebi que não há suporte para ponto flutuante. Sendo assim, resolvi fazer uma função/classe que resolva isso:

static void Main(string[] args)
{
// define os números a serem divididos e a precisão
int x = 10;
int y = 9;
int casas = 3;

// pega o valor inteiro da divisão
int resultado = x / y;

// descobre quanto falta para completar a próxima multiplicação inteira
int falta = x - (resultado * y);

// sabendo quanto falta, sabemos qual o percentual que falta (fração)
int prop = (falta * (int)Math.Pow(10,casas) ) / y;

resultado = resultado * (int)Math.Pow(10, casas) + prop;
}


Vc pode colocar o número de casas decimais que quiser. Se colocar 3, por exemplo, o resultado de 10/9 será 1111, ou seja, 1,111. O que o código faz é guardar no prório inteiro o resultado da operação. Seria como se o significando inteiro fosse 1111 e o expoente -3.

Nenhum comentário: