Domanda BigDecimal alla stringa


Ho un oggetto BigDecimal e voglio convertirlo in stringa. Il problema è che il mio valore ha una frazione e ottengo un numero enorme (in lunghezza) e ho solo bisogno del numero originale in stringa per esempio: per

BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());

l'output è:

10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375

e ho bisogno che l'out sia esattamente il numero 10.0001 in stringa


44
2017-12-16 09:55


origine


risposte:


Per ottenere esattamente 10.0001 è necessario utilizzare il costruttore String o valueOf (che costruisce un BigDecimale basato sulla rappresentazione canonica del doppio):

BigDecimal bd = new BigDecimal("10.0001");
System.out.println(bd.toString()); // prints 10.0001
//or alternatively
BigDecimal bd = BigDecimal.valueOf(10.0001);
System.out.println(bd.toString()); // prints 10.0001

Il problema con new BigDecimal(10.0001) è che l'argomento è a double e succede che i doppi non possono rappresentare 10.0001 Esattamente. Così 10.0001 è "trasformato" nel doppio più vicino possibile, che è 10.000099999999999766941982670687139034271240234375 e questo è ciò che è tuo BigDecimal Spettacoli.

Per questo motivo, raramente ha senso utilizzare il doppio costruttore.

Puoi leggere di più qui, Spostamento delle cifre decimali in una doppia


90
2017-12-16 09:57



Il tuo BigDecimal non contiene il numero 10.0001, perché l'hai inizializzato con a double, e il double non l'ha fatto abbastanza contiene il numero che hai pensato di fare. (Questo è il punto centrale di BigDecimal.)

Se usi il costruttore basato su stringhe anziché:

BigDecimal bd = new BigDecimal("10.0001");

... allora in realtà conterrà il numero che ti aspetti.


9
2017-12-16 09:58



Utilizzando il metodo seguente è possibile convertire java.math.BigDecimal in String.

   BigDecimal bigDecimal = new BigDecimal("10.0001");
   String bigDecimalString = String.valueOf(bigDecimal.doubleValue());
   System.out.println("bigDecimal value in String: "+bigDecimalString);

Produzione:
valore bigDecimal in String: 10,0001


5
2018-06-13 18:07



// Convert BigDecimal number To String by using below method //

public static String RemoveTrailingZeros(BigDecimal tempDecimal)
{
    tempDecimal = tempDecimal.stripTrailingZeros();
    String tempString = tempDecimal.toPlainString();
    return tempString;
}

// Recall RemoveTrailingZeros
BigDecimal output = new BigDecimal(0);
String str = RemoveTrailingZeros(output);

1
2018-06-28 13:44



Il BigDecimal non può essere un doppio. puoi usare il numero Int. se si desidera visualizzare esattamente il proprio numero, è possibile utilizzare il costruttore String di BigDecimal.

come questo:

BigDecimal bd1 = new BigDecimal("10.0001");

ora è possibile visualizzare bd1 come 10.0001

Cosi 'semplice. IN BOCCA AL LUPO.


0
2017-12-21 15:19



Per archiviare il risultato necessario con il doppio costruttore è necessario arrotondare BigDecimal prima di convertirlo in String, ad es.

new java.math.BigDecimal (10.0001) .round (new java.math.MathContext (6, java.math.RoundingMode.HALF_UP)). toString ()

stamperà il "10.0001"


0
2018-04-18 13:28



Per un miglior supporto, le diverse localizzazioni usano questo modo:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(0);
df.setGroupingUsed(false);

df.format(bigDecimal);

anche tu puoi personalizzarlo:

DecimalFormat df = new DecimalFormat("###,###,###");
df.format(bigDecimal);

0
2017-07-12 08:46