web-dev-qa-db-fra.com

Double valeur avec une précision spécifique en java

Je programme un programme Java simple. Je dois obtenir une chaîne d'entrée et la diviser en deux parties: 1-double 2-chaîne . Ensuite, je dois effectuer un calcul simple sur le double et envoyer le résultat à la sortie avec une précision spécifique (4). Cela fonctionne bien, mais il y a un problème lorsque l'entrée est 0, alors cela ne fonctionne pas correctement.

Par exemple, pour ces entrées, la 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 indique 0.0 . Que dois-je faire pour le forcer à afficher 0,0000?

J'ai lu un article similaire sur la double précision, ils suggèrent quelque chose comme la classe BigDecimal, mais je ne peux pas les utiliser dans ce cas, Mon code pour faire ceci 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");
9
MehrdadSComputer

DecimalFormat vous permettra de définir le nombre de chiffres que vous souhaitez afficher. Un '0' forcera la sortie des chiffres même si la valeur est zéro, alors qu'un '#' omettra les zéros.

System.out.print(new DecimalFormat("#0.0000").format(value)+" kg\n"); devrait faire l'affaire.

Voir la documentation

Remarque: si vous l'utilisez fréquemment, vous ne devez instancier le formateur qu'une seule fois pour des raisons de performances et stocker la référence: final DecimalFormat df = new DecimalFormat("#0.0000");. Ensuite, utilisez df.format(value).

19
Blacklight

ajoutez cette instance de DecimalFormat en haut de votre méthode:

DecimalFormat four = new DecimalFormat("#0.0000"); // will round and display the number to four decimal places. No more, no less.

// the four zeros after the decimal point above specify how many decimal places to be accurate to.
// the zero to the left of the decimal place above makes it so that numbers that start with "0." will display "0.____" vs just ".____" If you don't want the "0.", replace that 0 to the left of the decimal point with "#"

ensuite, appelez l'instance "quatre" et passez votre double valeur lors de l'affichage:

double value = 0;
System.out.print(four.format(value) + " kg/n"); // displays 0.0000
4
Michael Yaworski

Je vous suggère d'utiliser la classe BigDecimal pour calculer avec des valeurs à virgule flottante. Vous pourrez contrôler la précision de l'arithmétique en virgule flottante. Mais revenons au sujet :)

Vous pouvez utiliser les éléments suivants:

static void test(String stringVal) {
    final BigDecimal value = new BigDecimal(stringVal).multiply(new BigDecimal(2.2046));
    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(4);
    df.setMinimumFractionDigits(4);
    System.out.println(df.format(value) + " kg\n");
}

public static void main(String[] args) {
    test("0");
    test("1");
    test("3.1");
}

vous donnera la sortie suivante:

0,0000 kg

2,2046 kg

6,8343 kg
1
Ortwin Angermeier

Utilisez DecimalFormat pour formater votre double valeur en sortie de chaîne à précision fixe. 

DecimalFormat est une sous-classe concrète de NumberFormat qui formate Nombres décimaux. Il a une variété de fonctionnalités conçues pour le rendre possible d’analyser et de formater les nombres dans n’importe quel environnement local, y compris l’assistance pour les chiffres occidentaux, arabes et indiens. Il prend également en charge différents types de nombres, y compris les entiers (123), les nombres à virgule fixe (123.4), notation scientifique (1.23E4), pourcentages (12%) et devise montants (123 $). Tous peuvent être localisés.

Exemple -

System.out.print(new DecimalFormat("##.##").format(value)+" kg\n");
0

String.format est en train de créer une représentation sous forme de chaîne de la valeur en virgule flottante. S'il ne fournit pas d'indicateur pour une précision minimale, insérez simplement des zéros dans la fin de la chaîne.

0
Aaron