2009-12-01 25 views

risposta

0

è possibile trasformarlo in una stringa utilizzando DecimalFormat

15

In realtà non è una conversione, ma a come si visualizzazione il numero. È possibile utilizzare NumberFormat per specificare come deve essere visualizzato il numero.

Controllare la differenza:

double number = 100550000.75; 
NumberFormat formatter = new DecimalFormat("#0.00"); 

System.out.println(number); 
System.out.println(formatter.format(number)); 
+0

puoi dirmi come fare lo stesso per i numeri che hanno il punto decimale. per esempio. 1234567812,1212. La notazione esponenziale sarà 1.2345678121212E9. Devo riportarlo a 1234567812.1212. Se ci sono 4 numeri dopo il punto decimale, ho bisogno di ottenere 4. Se 5 numero, quindi 5. – sai

+0

Sai, usare #. ########. È possibile aggiungere più # dopo il separatore decimale per aumentare la precisione. Tuttavia, tieni presente che la precisione massima sarà determinata dal tipo di dati che utilizzi. Se si usa il doppio, ad esempio, non si otterranno più di 17 cifre decimali (basta controllare cosa succede se si stampa 1/3 senza un formattatore). Quindi, se includi più di diciassette # dopo il separatore decimale, non aumenterà la precisione. Se hai bisogno di più precisione del doppio, vedi la classe BigDecimal. –

11

Come su BigDecimal.valueOf(doubleToFormat).toPlainString()

+0

Quale sarebbe la differenza se avessi usato toString() invece di toPlainString()? –

+1

@ShiladittyaChakraborty, la prima frase in [API per BigDecimal.toString()] (https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#toString--) dichiara quella notazione scientifica sarà usata se è necessario un esponente. – Paul

0

la risposta @ b.roth è corretto solo se è determinato paese. Ho usato questo metodo e ho ottenuto il problema i18n, perché il new DecimalFormat("#0.00) prende il separatore decimale del paese particolare. Ad esempio, se un paese utilizza la separazione decimale come ",", il valore formattato sarà in 0,00 (es. 1.2e2 sarà 120.00 in alcuni luoghi e 120,00) in alcuni punti a causa del problema i18n come detto here ..

il metodo che preferisco è `(. nuova BigDecimal ("1.2e2") toPlainString())

0

basta aggiungere tag seguente per jspx: -

<f:convertNumber maxFractionDigits="4" minFractionDigits="2" groupingUsed="false"/> 
0
String data = Long.toString((long) 3.42E8); 
System.out.println("**************"+data); 
0

prova il seguente

long l; 
double d; //It holds the double value.such as 1.234E3 
l=Double.valueOf(time_d).longValue(); 

si ottiene il valore decimale nella variabile l.

0

Mentre si lavora con i numeri doppio e lungo in Java, si vedrà che la maggior parte del valore è visualizzata in forma esponenziale.

Per esempio: in seguito stiamo moltiplicando 2.35 con 10000 e il risultato è stampato.

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + a.doubleValue()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + a.doubleValue()); 

Risultato:

  1. 2.85E-4
  2. 2.85E8

Così si può vedere il risultato viene stampato in formato esponenziale. Ora potresti voler visualizzare il risultato in puro formato decimale come: 0,000285 o 285000000. Puoi farlo semplicemente usando la classe java.math.BigDecimal. Nell'esempio seguente viene utilizzato BigDecimal.valueOf() per convertire il valore Double in BigDecimal e in .toPlainString() per convertirlo in una stringa decimale semplice.

import java.math.BigDecimal; 
//.. 
//.. 

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + BigDecimal.valueOf(a).toPlainString()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + BigDecimal.valueOf(a).toPlainString()); 

Risultato:

  1. 0.000285

L'unico svantaggio del metodo sopra è che genera lunghe stringhe di numero. Potresti voler limitare il valore e arrotondare il numero a 5 o 6 punti decimali. Per questo è possibile utilizzare la classe java.text.DecimalFormat. Nell'esempio seguente stiamo arrotondando il numero a 4 cifre decimali e stampando l'output.

import java.text.DecimalFormat; 
//.. 
//.. 

Double a = 2.85d/10000; 
DecimalFormat formatter = new DecimalFormat("0.0000"); 
System.out.println(formatter .format(a)); 

Risultato:

0,0003

Ho appena provato a comprimere questo codice con una sola riga, stamperà il valore di 'a', con due cifre decimali:

new DecimalFormat("0.00").format(BigDecimal.valueOf(a).toPlainString()); 

Conversione felice :)

0

Si può fare:

BigDecimal 
    .valueOf(value) 
    .setScale(decimalLimit, RoundingMode.HALF_UP) 
    .toPlainString() 
Problemi correlati