Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [J2ME] come si fa senza float ??

    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.

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    interessa anche a me
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    up !!!

    VVoVe:

  4. #4
    mi sa che non esiste nulla del genere... ti tocca implementare da te la classe per gestire i numeri decimali


  5. #5
    posto la soluzione che ho ideato per la moltiplicazione dei numer in virgola mobile :

    codice:
    	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; 
    	}

  6. #6
    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...

  7. #7

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.