Arrondir un double à 5 décimales dans Java ME
Comment puis-je autour d'un double à 5 décimales, sans l'aide de DecimalFormat
?
Pourquoi voudriez-vous d'éviter de la classe qui existe exactement pour ce travail? Et si vous voulez être un double, vous êtes essentiellement en demander quelque chose d'impossible. Vous ne peut tout simplement pas autour d'un binaire double pour un nombre donné de décimal lieux, sauf dans quelques cas particuliers.
Michael: Non DecimalFormat dans JavaME
Michael: Non DecimalFormat dans JavaME
OriginalL'auteur Kevin Boyd | 2009-09-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez arrondir à la cinquième décimale en faisant d'elle la première décimale en multipliant le nombre. Puis faire normale de l'arrondissement, et en faire la cinquième décimale de nouveau.
Disons que la valeur de la ronde est un
double
nomméx
:Si vous voulez arrondir à 6 chiffres après la virgule, laissez
factor
être1e6
, et ainsi de suite.Je ne vois pas le problème. Il a été demandé comment faire pour arrondir un
double
à cinq décimales, et c'est le meilleur que vous allez obtenir. Évidemment, vous ne devez pas utiliser unedouble
si vous êtes représentant des valeurs décimales, mais ce n'était pas la question.Remarque: bien qu'il limite les chiffres 5 chiffres, il ne peut pas être certain d'être correcte, car elle n'a pas les moyens de s'assurer que la valeur de l'entier
Math.round(x * factor)
peut être représenté dansfactor
-sat, ou qu'elle sera limitée à la valeur d'exposant des lieux (c'est à dire de 5 places de la partie fractionnaire). Pour plus d'info Java la théorie et la pratique: Où est votre point? (Les Erreurs d'arrondi) et Ce que Tous les scientifiques Devraient Savoir au Sujet de l'Arithmétique à virgule FlottanteVous avez raison au sujet de l'exactitude des cours, mais comme je l'ai dit avant, c'est la meilleure façon que vous allez obtenir avec
double
. Si vous voulez exacte décimal calculs, vous ne devriez pas être à l'aide dedouble
. Binaire les calculs en virgule flottante sont utilisés pour des choses comme le calcul scientifique où toutes les valeurs sont fondamentalement inexact, et dans cette situation, certains approximative arrondi à 5 décimales, par exemple à des fins d'affichage, est parfaitementMath.round()
n'est pas disponible en J2ME.OriginalL'auteur Joren
Quoi que vous fassiez, si vous vous retrouvez avec un
double
valeur, il est peu probable d'être exactement 5 décimales. Qui n'est tout simplement pas la façon binaire arithmétique à virgule flottante œuvres. Le mieux que vous allez faire est de "la double valeur plus proche à la valeur d'origine arrondi à 5 décimales". Si vous imprimez le exacte de la valeur de ce double, il ne serait probablement plus de 5 décimales.Si vous vraiment voulez exacte des valeurs décimales, vous devez utiliser
BigDecimal
.BigDecimal
en Java-MOI - car il n'y a pas une telle chose - ni dans les CLDC, ni CDC profilsOriginalL'auteur Jon Skeet
Multiplier par 100000. Ajouter 0,5. Tronquer entier. Puis diviser par 100000.
Code:
OriginalL'auteur Thomas Padron-McCarthy
Si vous êtes d'accord avec les bibliothèques externes, vous pouvez jeter un oeil à microfloat, spécifiquement MicroDouble.toString(double d, int longueur).
OriginalL'auteur Zed
Essayez ce qui suit
Ou si vous souhaitez une quantité minimale de code
D'importation statique
Et
ce qui concerne,
OriginalL'auteur Arthur Ronald
OriginalL'auteur Milhous
OriginalL'auteur Niger
Je suis tombé ici en cherchant un moyen de limiter mon nombre double à deux décimales, afin de ne pas tronquer ni arrondi. Les mathématiques.Tronquer vous donne la partie entière du nombre double et rejette tout ce qui est après la virgule, ce qui 10.123456 devient 10 après la troncature. Les mathématiques.Round arrondi au nombre le plus proche de la valeur intégrale de sorte 10.65 devient 11 alors que 10.45 devient 10. Donc, ces deux fonctions n'ont pas à répondre à mes besoins (je souhaite que .Net avait surchargé ces deux pour permettre la troncature ou de l'arrondi à un certain nombre de décimales). La façon la plus simple pour faire ce que je besoin est:
OriginalL'auteur wildriver