J'ai un objet BigDecimal et je veux le convertir en chaîne . Le problème est que ma valeur a une fraction et que je reçois un nombre énorme (en longueur) et que je n'ai besoin que du nombre d'origine en chaîne, par exemple:. pour
BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());
la sortie est:
10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375
et j'ai besoin de sortir pour être exactement le nombre 10.0001
dans la chaîne
Pour obtenir exactement 10.0001
, vous devez utiliser le constructeur String ou valueOf
(qui construit un BigDecimal basé sur la représentation canonique du double):
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
Le problème avec new BigDecimal(10.0001)
est que l'argument est une double
et il arrive que les doublons ne puissent pas représenter 10.0001
exactement. Donc, 10.0001
est "transformé" en un double le plus proche possible, qui est 10.000099999999999766941982670687139034271240234375
et c'est ce que montre votre BigDecimal
.
Pour cette raison, il est rarement logique d'utiliser le constructeur double.
Vous pouvez en lire plus à ce sujet ici, Déplacer les décimales dans un double
Votre BigDecimal
ne contient pas le nombre 10.0001
, car vous l'avez initialisé avec un double
, et le double
n'a pas tout à fait contient le nombre que vous pensiez être le cas. (C’est l’intérêt de BigDecimal
.)
Si vous utilisez le constructeur basé sur une chaîne à la place:
BigDecimal bd = new BigDecimal("10.0001");
... alors il contiendra réellement le nombre que vous attendez.
En utilisant la méthode ci-dessous, vous pouvez convertir Java.math.BigDecimal en String .
BigDecimal bigDecimal = new BigDecimal("10.0001");
String bigDecimalString = String.valueOf(bigDecimal.doubleValue());
System.out.println("bigDecimal value in String: "+bigDecimalString);
Sortie:
valeur bigDecimal dans String: 10.0001
Pour une meilleure prise en charge, les différentes régions utilisent la méthode suivante
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(0);
df.setGroupingUsed(false);
df.format(bigDecimal);
aussi vous pouvez le personnaliser:
DecimalFormat df = new DecimalFormat("###,###,###");
df.format(bigDecimal);
// 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);
Si vous devez simplement définir la quantité de précision et arrondir la valeur, la bonne façon de le faire est d'utiliser son propre objet pour cela.
BigDecimal value = new BigDecimal("10.0001");
value = value.setScale(4, RoundingMode.HALF_UP);
System.out.println(value); //the return should be "10.0001"
L'un des piliers de la programmation orientée objet (POO) est "l'encapsulation". Ce pilier indique également qu'un objet doit gérer ses propres opérations, comme suit:
Pour archiver le résultat nécessaire avec un constructeur double, vous devez arrondir BigDecimal avant de le convertir en chaîne, par exemple.
new Java.math.BigDecimal (10.0001) .round (new Java.math.MathContext (6, Java.math.RoundingMode.HALF_UP)). toString ()
imprimera le "10.0001"
Le BigDecimal ne peut pas être un double . Vous pouvez utiliser Int number . Si vous voulez afficher un nombre exact, vous pouvez utiliser le constructeur String de BigDecimal.
comme ça:
BigDecimal bd1 = new BigDecimal("10.0001");
maintenant, vous pouvez afficher bd1 sous la forme 10.0001
Si simple . BONNE CHANCE.