Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema parseFloat

  1. #1

    Problema parseFloat

    Salve a tutti.

    Mi trovo in una situazione talmente strana che non so davvero come uscirne!

    Devo caricare il contenuto di un file di testo su una tabella, così ho fatto il mio bel metodo Java che legge, fa tutti i controlli del caso e poi scrive. Proprio nella lettura sta la cosa bizzarra!
    Il bean su cui vado a scrivere quello che leggo prevede una percentuale e per sicurezza ho fatto 2 campi su cui scrivere questo valore: uno stringa (dove butto dentro quello che leggo senza toccarlo) ed uno float (dove faccio la conversione dello stesso valore letto prima). Sono previsti 3 caratteri per la parte intera, 1 per il punto, 6 per la parte decimale.
    Questo è l'estratto di codice interessato:

    codice:
    for (int i=0; i<file.size(); i++) {
      String riga = (String)file.get(i);
      ...
      det.setSPerc(riga.substring(82,92));
      det.setFPerc(Float.parseFloat(riga.substring(82,92)));
      ...
    }
    Il file ha circa 500 righe, con i valori più disparati, ma solo per uno (almeno per ora) succede l'inspiegabile. Questo è quello che vedo quando vado in debug:
    det.getSPerc() = 18.218623
    det.getFPerc() = 18.218622

    Qualcuno sa spiegarmi dove sto sbagliando?

  2. #2
    Semplice usa un Double!!!

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Il numero 18.218623 non è rappresentabile tramite un float a 32 bit, secondo la codifica IEEE 754.

    Stando alla codifica IEEE 754, la mantissa di quel numero viene reappresentata in binario in questo modo:

    codice:
    001000110111111101111010110101001011001001110100011
    La specifica IEEE 754 su 32 bit (precisione singola) prevede "solo" 23 bit per la mantissa, che viene, di conseguenza, troncata:

    codice:
    00100011011111110111101
    La rappresentazione decimale di quella mantissa porta proprio ad avere il numero 18.218622.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    In effetti con il double funziona!

    Grazie mille!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.