Ce programme fonctionne, sauf lorsque le nombre de nJars est un multiple de 7, j'obtiendrai une réponse du type 14,99999999999999998 $. Pour 6, la sortie est 14.08. Comment puis-je corriger les exceptions pour des multiples de 7 afin d'afficher quelque chose comme 14,99 $?
import Java.util.Scanner;
public class Homework_17
{
private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs;
public static void main(String[] args)
{
computeShippingCost();
}
public static void computeShippingCost()
{
System.out.print("Enter a number of jars: ");
Scanner kboard = new Scanner (System.in);
nJars = kboard.nextInt();
int nCartons = (nJars + 11) / 12;
int totalOunces = (nJars * 21) + (nCartons * 25);
int lbs = totalOunces / 16;
double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0;
System.out.print("$" + shippingCost);
}
}
Utilisez un DecimalFormatter :
double number = 0.9999999999999;
DecimalFormat numberFormat = new DecimalFormat("#.00");
System.out.println(numberFormat.format(number));
Vous donnera "0,99". Vous pouvez ajouter ou soustraire 0 sur le côté droit pour obtenir plus ou moins de nombres décimaux.
Ou utilisez '#' à droite pour rendre les chiffres supplémentaires facultatifs, comme dans # # # (0.30) laisserait tomber le dernier 0 pour devenir (0.3).
Si vous voulez imprimer/écrire une double valeur sur la console, utilisez les méthodes System.out.printf()
ou System.out.format()
.
System.out.printf("\n$%10.2f",shippingCost);
System.out.printf("%n$%.2f",shippingCost);
Découvrez DecimalFormat: http://docs.Oracle.com/javase/6/docs/api/Java/text/DecimalFormat.html
Vous ferez quelque chose comme:
new DecimalFormat("$#.00").format(shippingCost);
Ou puisque vous travaillez avec de la monnaie, vous pouvez voir comment NumberFormat.getCurrencyInstance()
fonctionne pour vous.
La classe de formatage est également une bonne option. fmt.format ("%. 2f", variable); 2 indique le nombre de décimales souhaité. Vous pouvez le changer à 4 par exemple. N'oubliez pas de fermer le formateur.
private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs;
public static void main(String[] args)
{
computeShippingCost();
}
public static void computeShippingCost()
{
System.out.print("Enter a number of jars: ");
Scanner kboard = new Scanner (System.in);
nJars = kboard.nextInt();
int nCartons = (nJars + 11) / 12;
int totalOunces = (nJars * 21) + (nCartons * 25);
int lbs = totalOunces / 16;
double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0;
Formatter fmt = new Formatter();
fmt.format("%.2f", shippingCost);
System.out.print("$" + fmt);
fmt.close();
}
Utilisez la classe DecimalFormat pour formater le double
Vous utilisez la méthode String.format () .
ok une autre solution que je pensais juste pour le plaisir serait de transformer votre virgule décimale en chaîne, puis coupez la chaîne en 2 chaînes, l'une contenant le point et les décimales et l'autre contenant l'Int situé à gauche du point. après cela, vous limitez la chaîne du point et les décimales à 3 caractères, un pour la virgule décimale et les autres pour les décimales. alors juste recombiner.
double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0;
String ShippingCost = (String) shippingCost;
String decimalCost = ShippingCost.subString(indexOf('.'),ShippingCost.Length());
ShippingCost = ShippingCost.subString(0,indexOf('.'));
ShippingCost = ShippingCost + decimalCost;
Là! Simple, non?