Double de la valeur avec précision spécifique à java
Je suis de la programmation d'un programme java simple. J'ai besoin d'obtenir une chaîne de caractères d'entrée et de le diviser en deux parties: 1-double-2-chaîne.
Ensuite, j'ai besoin de faire un simple calcul sur le double et envoyer le résultat à la sortie avec précision spécifique(4). Il fonctionne très bien, mais il y a un problème lorsque l'entrée est à 0, alors il ne fonctionne pas correctement.
Par exemple, pour ces d'entrée, de sortie sera:
1 kg
sortie:2.2046
3.1 kg
sortie:6.8343
Mais lorsque l'entrée est à 0, la sortie doit être 0.0000, mais il montre 0.0 .
Que dois-je faire pour le forcer à montrer 0.0000?
J'ai lu similaire post sur double précision, ils suggèrent quelque chose comme BigDecimal
classe, mais je ne peux pas les utiliser dans ce cas,
mon code pour le faire, c'est:
line=input.nextLine();
array=line.split(" ");
value=Double.parseDouble(array[0]);
type=array[1];
value =value*2.2046;
String s = String.format("%.4f", value);
value = Double.parseDouble(s);
System.out.print(value+" kg\n");
j'ai utilisé "%.4f", mais il affiche cette erreur: Exception in thread "main" java.util.MissingFormatWidthException: 0.4 f
Voir aussi stackoverflow.com/questions/10959424/... mais ce n'est pas un doublon de cette raison de la mise en forme voulais pour 0.
OriginalL'auteur MehrdadSComputer | 2013-09-22
Vous devez vous connecter pour publier un commentaire.
DecimalFormat
vous permettra de définir le nombre de chiffres que vous voulez afficher. Un " 0 " force, d'une puissance de chiffres, même si la valeur est zéro, alors qu'un '#' va ignorer les zéros.System.out.print(new DecimalFormat("#0.0000").format(value)+" kg\n");
devrait pour l'astuce.Voir le la documentation
Remarque: s'il est utilisé fréquemment, pour des raisons de performances, vous devez instancier le formateur en une seule fois et stocker la référence:
final DecimalFormat df = new DecimalFormat("#0.0000");
. Ensuite, utilisezdf.format(value)
.Je l'ai déjà fait, remplacer votre dernière ligne qui imprime votre valeur.
il a travaillé pour moi, mais merci de la changer ("#0.0000"), votre réponse est hors mis est .0000 , mais si l'on utilise ("#0.0000") , c'est montrer 0.0000, merci pour votre aide.
OriginalL'auteur Blacklight
ajouter cette instance de DecimalFormat vers le haut de votre méthode:
puis, à l'appel de l'instance "quatre" et passer votre double de la valeur lors de l'affichage:
OriginalL'auteur Michael Yaworski
Je vous suggérons d'utiliser le
BigDecimal
classe pour le calcul des valeurs à virgule flottante. Vous serez en mesure de contrôler la précision de l'arithmétique à virgule flottante. Mais revenons au sujet 🙂Vous pouvez utiliser les éléments suivants:
vous donnera le résultat suivant:
OriginalL'auteur Ortwin Angermeier
Chaîne.le format est juste makign une représentation de Chaîne de la valeur à virgule flottante. Si elle ne marche pas fournir un drapeau pour un minimum de précision, puis il suffit de tampon de la fin de la chaîne avec des zéros.
j'ai utilisé votre suggestion, mais ça ne fonctionne pas, comme vous l'avez dit BlackLight réponse est ce que je veux, Merci,
C'est impossible pour ma réponse à "pas de travail" 😀 C'est juste l'ajout de "0"à une chaîne. C'est une sous-solution optimale. Pas de point de ré-inventer les roues!
je pense qu'il ne fonctionne pas parce que de cette partie
value=Double.parseDouble(array[0]);
Je voulais ajouter le rembourrage sur la Chaîne résultante 🙂 c'est ce Que (je suppose) decimalformat sera fait en interne.
OriginalL'auteur Aaron
Utilisation
DecimalFormat
au format de votre double de la valeur de précision fixe chaîne de sortie.Exemple -
veuillez commentaire pour negetive?
OriginalL'auteur Subhrajyoti Majumder