Avoir le code suivant en Java:
double operation = 890 / 1440; System.out.println(operation);
7 Réponses :
Initialisez votre variable avec une expression qui évalue à un double plutôt que d'int: sinon l'expression est effectuée à l'aide de l'arithmétique entier (qui finit par tronquer le résultat). Ce résultat tronqué est ensuite converti en un double code>. P> p>
Bien que cela soit joli, il peut être utile de lancer explicitement les deux chiffres. La raison en est que si quelqu'un (même l'OP plus tard) est devenu plus tard et change les chiffres, ils peuvent oublier d'ajouter les décimales et la fonctionnalité se brisera mystérieusement.
Je suis d'accord, la solution 123D de Bozho est préférée comme l'intention plus claire.
Un de nombreux gotchas. Je préfère laisser un petit commentaire dans ce cas. Quelque chose comme: "Double littéraux doit être utilisé. Les littéraux entier entraîneront des arithmétiques entier." C'est toujours un petit rappel pourquoi est-ce le cas.
Vous pouvez utiliser le double littéral alors vous pouvez utiliser un par exemple: p> d code> - sinon vos numéros sont pris en compte de type int code>: numberFormat code> à Spécifiez le nombre de chiffres. p>
Le numéroFormat me permet-il d'économiser quatre chiffres décimaux dans une variable ou d'affiche uniquement les premiers chiffres décimaux "x"?
NumberFormat n'affecte que la présentation, la variable 'opération' n'est pas affectée
Ceci est fait à l'aide de BigDecimal sortie p> opération: 0.6180555555555556
échelonné: 0.6181 P> p>
Vous pouvez également faire quelque chose comme ceci: qui imprime les éléments suivants: p> 0.6180555555555556 P>
BlockQuote> Vous pouvez vérifier comment arrondir le numéro ici p> p>
N'oubliez pas que vous ne coulez pas (890/1440) pour doubler avec cela. Vous coulez 890 pour doubler avec ceci. Et une opération (double / int) renvoie un double.
Oui. Mais je pense que cette méthode est un peu meilleure puisqu'il fonctionne également lorsque vous avez des variables doubles au lieu de codées dures, au moins, dans C #, je l'avais l'habitude d'expérimenter le même problème et de la fixer comme ci-dessus.
BigDecimal, bien que très maladroit fonctionne avec, donne quelques options de formatage:
BigDecimal first = new BigDecimal(890);
BigDecimal second = new BigDecimal(1440);
System.out.println(first.divide(second, new MathContext(4, RoundingMode.HALF_EVEN)));
Si vous voulez vraiment arrondir sur les 4 premiers chiffres fractionnaires, vous pouvez également utiliser des arithmétiques entier en multipliant le premier numéro afin que ses chiffres soient déplacés de la quantité appropriée de la quantité F dans la gauche:
long fractionalPart = 10000L * 890L / 1440L;
double operation = 890.0 / 1440;
System.out.printf(".4f\n", operation);
Où voulez-vous "sauver"?
Les opérations sur les numéros de points flottants (flottants ou doubles) ne donnent pas de résultat exact, ce qui les rend inappropriés à tout calcul financier qui nécessite un résultat exact et non approximativement. Utilisez BigDecimal à la place.