PDA

Visualizza la versione completa : [J2ME] come si fa senza float ??


CrashOverride
15-01-2005, 19:09
ciao,

sto facendo un programmino per il mio Noki 3660.

con sommo stupore mi accorgo che non sono supportati i numeri in virgola mobile.

esiste qualcosa di alternativo ai float ed ai double per effettuare conti ?? mi basterebbero anche solo 2 decimali.

netarrow
16-01-2005, 11:51
interessa anche a me :fagiano:

CrashOverride
22-01-2005, 12:58
up !!!

:oVVoVe:

giuseppe sicari
22-01-2005, 15:56
mi sa che non esiste nulla del genere... ti tocca implementare da te la classe per gestire i numeri decimali

:ciauz:

CrashOverride
27-01-2005, 13:08
posto la soluzione che ho ideato per la moltiplicazione dei numer in virgola mobile :



String Moltiplica(String Fattore1, String Fattore2){
String Risultato;
/*Posizioni virgole decimali*/
int PosizioneVirgolaFattore1;
int PosizioneVirgolaFattore2;
int PosizioneVirgolaRisultato;
/*parte intera del primo fattore*/
String Fatt1Part1;
/*parte decimale del primo fattore*/
String Fatt1Part2;
/*parte intera del secondo fattore*/
String Fatt2Part1;
/*parte decimale del secondo fattore*/
String Fatt2Part2;
String Ris1;
String Ris2="";
StringTokenizer TokFact1 = new StringTokenizer(Fattore1,",");
Fatt1Part1 = TokFact1.nextToken();
Fatt1Part2 = TokFact1.nextToken();
StringTokenizer TokFact2 = new StringTokenizer(Fattore2,",");
Fatt2Part1 = TokFact2.nextToken();
Fatt2Part2 = TokFact2.nextToken();
PosizioneVirgolaFattore1 = Fatt1Part2.length();
PosizioneVirgolaFattore2 = Fatt2Part2.length();
PosizioneVirgolaRisultato = PosizioneVirgolaFattore1+PosizioneVirgolaFattore2;
int F1=Integer.parseInt(Fatt1Part1+Fatt1Part2);
int F2=Integer.parseInt(Fatt2Part1+Fatt2Part2);
Ris1=String.valueOf((F1*F2));
for(int i = 0 ; i < (Ris1.length()-PosizioneVirgolaRisultato);i++){
Ris2+=Ris1.charAt(i);
}
Risultato = Ris2+",";
Ris2=Ris1.substring(PosizioneVirgolaRisultato+1);
Risultato+=Ris2;
return Risultato;
}

Ohmnibus
27-01-2005, 13:32
Io ho adottato la soluzione della virgola fissa. In pratica decido la precisione della parte decimale, supponiamo di 3 cifre, quindi moltiplico tutto per 1000.

In pratica 1 diventa mille, 2.3 diventa 2300 e 4.187 diventa 4187.

Per le somme e le sottrazioni non cambia nulla.

per le moltiplicazioni è necessario dividere per 1000 il risultato.

Per le divisioni è necessario moltiplicare per 1000 prima di dividere (per non perdere di precisione): 4.12/0.45 diventa (4120*1000)/450

Un'altra soluzione è quella di emulare la virgola mobile, creando un oggetto "Float" composto da un intero ed un esponente. L'intero rappresenterà sempre il valore del numero, l'esponente la posizione della virgola, così 132.4519 diventa 0.1324519 * 10^3 (memorizzo 1324519 e 3) mentre 0.0045 diventa 0.45 * 10^-2 (memorizzo 45 e -2). Poi per risolvere le operazioni però vengono fuori i primi problemi, ma è il metodo più preciso dato che è quello adottato dai coprocessori matematici...

stefano80super
27-01-2005, 14:34
se vi può essere di aiuto:

http://developers.sun.com/techtopics/mobility/midp/questions/float/

:ciauz:

Loading