Quel type de données est apte à représenter un nombre décimal comme "10364055.81".
Si essayé en utilisant double: p> mais quand j'essaie d'imprimer le nombre, Son affichage comme " devrais-je utiliser BigDecimal? Mais son affichage comme BTW, utilisera un effet bigdecimal la performance de l'application ?? Je pourrais l'utiliser dans presque tous mes DTO. Strong> p> p>
4 Réponses :
Comment un numéro est affiché est distinct em> de la manière dont le numéro est stocké. p>
Jetez un coup d'œil à décimalformat a> Pour contrôler la manière dont vous pouvez afficher vos chiffres lorsqu'un double (ou un flotteur, etc.). P>
Notez que choisir BigDecimal sur Double (ou inversement) a des avantages / contre et dépendra de vos besoins. Voir Voici pour plus d'informations. Du résumé: p>
en résumé, si performance brute et
l'espace sont les facteurs les plus importants,
Les types de points flottants primitifs sont
approprié. Si les valeurs décimales doivent
être représenté exactement, haute précision
le calcul est nécessaire, ou contrôle fin
de l'arrondi est souhaité, seulement
BigDecimal a le besoin
Capacités. P>
blockQuote>
Vous devez utiliser BigDecimal - mais utiliser le constructeur de chaînes strong>, par exemple: si vous passez un En règle générale, l'utilisation de constructeurs non stricts de BigDecimal devrait être considéré comme un avertissement que vous n'obtenez pas le plein bénéfice de la classe. p> EDIT STROND> - basé sur la relecture exactement ce que vous vouliez faire, ma demande initiale est probablement trop forte. BigDecimal est un bon choix lorsque vous devez représenter des valeurs décimales exactement (la manutention de l'argent étant le choix évident, vous ne voulez pas 599 * un million d'être Mais si vous n'êtes pas inquiet du nombre étant stocké en interne em> comme une valeur très légèrement différente du littéral décimal que vous avez entré et que vous souhaitez simplement l'imprimer à nouveau dans le même format, alors que d'autres ont dit, une instance de quant à la performance - les bigdecimaux seront naturellement plus lents que d'utiliser des primitives. Typiquement, si la grande majorité de votre programme implique des manipulations mathématiques, il est peu probable que remarquez toute différence de vitesse. Cela ne veut pas dire que vous devriez vous devoir SE BigDecimals partout; mais plutôt que si vous pouvez avoir un réel avantage de leurs caractéristiques qui seraient difficiles ou impossibles à réaliser avec un double double code> à bigdecimal, Java Doit créer ce double premier - et puisque les doubles ne peuvent pas représenter la plupart des fractions décimales avec précision, il est-ce que em> crée la valeur comme
10364055.8100000005215406875 code> et puis em> le transmet à la Constructeur bigdecimal. Dans ce cas, BigDecimal n'a aucun moyen de savoir que vous vouliez réellement dire la version du rondeur. P>
5990016.45 code> par exemple. P>
numberFormat code> (dans ce cas,
nouvelle décimalformat ("########. ##") code>) fera le truc pour sortir le Double bien, ou string.format a> peut faire beaucoup la même chose. p>
double code>, alors ne transpirez pas la différence de performance minuscule qu'ils introduisent théoriquement. P> p>
Eh bien, je pense que tu as raison. Mais un double type de données doit suffire à ce nombre (seulement deux décimales). En utilisant un bigdecimal où un double suffit peut causer une faible performance lors de certaines opérations.
Un double serait suffisant pour enregistrer ce numéro. Si votre problème est que vous n'aimez pas le format lors de l'impression ou de la mise dans une chaîne, vous pouvez utiliser NumberFormat: http://java.sun.com/javase/6/docs/api/java/text/numberformat.html p>
Vous pouvez utiliser double et afficher si avec system.out.printf (). .10f - signifie un double avec précision de 10 p> P>