2013-04-05 13 views
19

Mi piacerebbe convertire un BigDecimal in stringa per scopi di stampa ma stampare tutte le cifre senza notazione scientifica. Per esempio:Formato BigDecimal senza notazione scientifica con precisioni complete

BigDecimal d = BigDecimal.valueOf(12334535345456700.12345634534534578901); 
String out = d.toString(); // Or perform any formatting that needs to be done 
System.out.println(out); 

mi piacerebbe ottenere 12334535345456700,12345634534534578901 stampato. In questo momento ottengo: 1.23345353454567E + 16.

+0

'System.out.println (out);' 'non System.out.println (output);' –

+1

Parte il problema è '12334535345456700.12345634534534578901' viene troncato a' 1.23345353454567E + 16' prima ancora che il valore venga passato al costruttore 'BigDecimal', perché i doppi valori costanti nel codice non hanno molta precisione. Puoi verificarlo semplicemente cercando di memorizzarlo in una variabile 'double' e stampandolo: http://ideone.com/j5FKp1. È necessario iniziare con il valore come stringa se si desidera la precisione aggiuntiva. – mellamokb

risposta

28

per preservare la precisione per una BigDecimal è necessario passare il valore come String

BigDecimal d = new BigDecimal("12334535345456700.12345634534534578901"); 
System.out.println(d.toPlainString()); 
+0

Stamperà solo 12334535345456700 –

+0

Stampe '12334535345456700.12345634534534578901' per me :) – Reimeus

+0

Stampe perfette per me. Stai usando 'BigInteger' per caso? – christopher

1

si desidera utilizzare un DecimalFormat:

DecimalFormat df = new DecimalFormat("#.#"); 
String output = df .format(myBD); 
System.out.println(value + " " + output); 
11

La classe BigDecimal ha un metodo toPlainString. Chiama questo metodo invece dello standard toString e stamperà il numero completo senza notazione scientifica.

Esempio

BigDecimal b = new BigDecimal("4930592405923095023950238502395.3259023950235902"); 
System.out.println(b.toPlainString()); 

Output: 4930592405923095023950238502395.3259023950235902 
1

si potrebbe usare questo

BigDecimal d = BigDecimal.valueOf(12334535345456700.12345634534534578901); 
String out= d.toPlainString(); 
System.out.println(out); 
+2

-1 Il problema è nella precisione del numero originale passato come doppio. Potresti almeno fare la tua due diligence e testarlo con ideone, che richiede 30 secondi: http://ideone.com/n137Cs – mellamokb

+0

come mai hai accettato quel nuovo BigDecimal (valore String); da Reimeus può funzionare? Immagino che BigDecimal.valueOf non accetti le stringhe nel costruttore? lo fa? –

+0

A destra, credo 'valueOf' è solo per il passaggio di valori numerici. Sarà necessario utilizzare il costruttore per passare un valore di stringa. – mellamokb

Problemi correlati