2012-11-26 16 views
5

Sto provando a leggere i valori dal foglio Excel utilizzando java. Quando digito più di 10 lettere in una cella in Excel, viene visualizzato in forma esponenziale come "9.78313E + 2". ma questo non è il numero reale che ho dato. Qualsiasi corpo può aiutarmi in questo. Come posso convertire il modulo esponenziale sopra al numero originale usando il linguaggio java.Conversione del valore esponenziale in java in un formato numerico

Grazie in anticipo

+1

Ci dovrebbe mostrare il numero che avete in excel e il risultato in Java. – looper

+1

'9.78313E + 2' =' 978.313' Confondi il valore con il formato. 'double' non conserva il formato solo il valore. –

risposta

9
Double.parseDouble("9.78313E+2"); 

mi dà

978.313 

Per maggiori informazioni visita the doc.

Seguendo le vostre eventuali domande qui sotto, se hai inserito 4256411411 ed Excel presenta questo come 4.26E+09, mettendo tale valore in parseDouble() solo vi darà 4260000000. Se si desidera l'originale, è necessario esportare il file Excel in un formato più completo per il proprio programma Java e/o interrogarlo utilizzando un'API Java/Excel (ad es. POI)

+0

sì. dà ma questo non è il numero originale che ho dato nel foglio excel – user1853173

+0

Ho provato anche questo con BigDecimal. Dà anche la stessa risposta – user1853173

+0

Puoi mostrarci qual è il numero esatto? E stai recuperando il numero dal foglio Excel nel tuo codice Java? –

2

È possibile utilizzare BigDecimal, se si desidera il valore esatto che avete in Excel Sheet: -

BigDecimal bd = new BigDecimal("4256411411"); 
System.out.println(bd.doubleValue()); 

// If you are sure that's not a floating point number, then use 
System.out.println(bd.longValue()); 

Stampe: -

4.256411411E9 
4256411411 
+0

L'input dal foglio Excel che ottengo è in forma esponenziale – user1853173

+0

@ user1853173. Non puoi recuperare il valore in forma di stringa e convertirlo in 'BigDecimal'? –

+0

@ user1853173 .. Non memorizzare il valore recuperato in un tipo 'double'. Ma nel tipo String. –

0

È possibile convertire facilmente con i seguenti metodi:

Double.valueOf("9.78313E+2").longValue() o

BigDecimal bd = new BigDecimal("9.78313E+2"); 
long val = bd.longValue(); 

Supponendo che il numero dato è in forma stringa.

+1

Il codice sopra riportato restituisce l'output come 4260000000. ma questo non è il valore originale per 4,26E + 09. – user1853173

3

Prima di leggere il valore del formato excel, la colonna deve essere numerata.

This può essere aiuta a voi

AGGIORNATO

HSSFCell cellE1 = row1.getCell((short) 4); 
cellE1.setCellType(HSSFCell.CELL_TYPE_NUMERIC); 
Double e1Val = cellE1.getNumericCellValue(); 
BigDecimal bd = new BigDecimal(e1Val.toString()); 
long lonVal = bd.longValue(); 
System.out.println(lonVal); 
+0

Dovresti farlo in modo pragmatico. Prima di leggerlo, il programma dovrebbe cambiarlo in tipo numerico. Inoltre, qual è la tua API di lettura excel? – Suranga

+0

In java prima di leggere i valori da excel ho bisogno di cambiare il formato della cella in numero ?? – user1853173

+0

qual è la tua API di lettura excel? – Suranga

3

È possibile convertire i seguenti, ad esempio:. nuova BigDecimal ("406770000244E + 12") toBigInteger();

0

dispiace, ma nessuna delle risposte precedenti Double.parseDouble() e Double.valueOf() ... risolto il mio problema, e ho continuato a ottenere il valore esponenziale 'E' ...

This collegamento ha un approccio molto meglio per il problema , e come ho scritto lì - c'è una soluzione molto buona:

Avevo bisogno di convertire alcuni valori double in valori di valuta, e la maggior parte della soluzione è OK ma non per me.

Il DecimalFormat finalmente è stato il modo per me, ecco quello che ho fatto:

public String foo(double value) //Got here 6.743240136E7 or something.. 
    { 
     DecimalFormat formatter; 

     if(value - (int)value > 0.0) 
      formatter = new DecimalFormat("0.00"); //Here you can also deal with rounding if you wish.. 
     else 
      formatter = new DecimalFormat("0"); 

     return formatter.format(value); 
    } 

Come si può vedere, se il numero è naturale ottengo - diciamo - 20000000 invece di 2E7 (ecc) - senza alcun punto decimale.

e se è decimale, ottengo solo 2 cifre decimali.

Spero che questo possa essere d'aiuto.

0

Devono convertire la cella in formato numerico prima di leggere il valore della cella. Di seguito è il frammento di codice che viene utilizzato per ottenere il valore effettivo che è in formato esponenziale:

nextCell.setCellType(XSSFCell.CELL_TYPE_NUMERIC); 
Double doubleValue = nextCell.getNumericCellValue(); 
BigDecimal bd = new BigDecimal(doubleValue.toString()); 
long lonVal = bd.longValue(); 
String phoneNumber = Long.toString(lonVal).trim(); 
System.out.print("PhoneNumber " + phoneNumber); 

Blog è stato wirtten per presentare il risultato effettivo.

saluti, Ankur

0

È inoltre possibile utilizzare classi wrapper:

Double bd=new Double(4445566622); 
System.out.println(bd.longValue()); 

uscite -4445566622

Problemi correlati