Hoe beperk ik het aantal decimalen dat wordt afgedrukt voor een dubbel?

Dit programma werkt, behalve als het aantal nJars een veelvoud van 7 is, krijg ik een antwoord als $ 14,99999999999998. Voor 6 is de output 14.08. Hoe los ik uitzonderingen op voor veelvouden van 7, zodat het iets als $ 14,99 wordt weergegeven?

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);
   }
}

Antwoord 1, autoriteit 100%

Gebruik een DecimalFormatter:

double number = 0.9999999999999;
DecimalFormat numberFormat = new DecimalFormat("#.00");
System.out.println(numberFormat.format(number));

Geeft u “0.99”. U kunt 0 aan de rechterkant optellen of aftrekken om meer of minder decimalen te krijgen.

Of gebruik ‘#’ aan de rechterkant om de extra cijfers optioneel te maken, want bij #.## (0.30) zou de afsluitende 0 worden verwijderd om (0.3) te worden.


Antwoord 2, autoriteit 18%

Als u dubbele waarden op de console wilt afdrukken/schrijven, gebruik dan de methoden System.out.printf()of System.out.format().

System.out.printf("\n$%10.2f",shippingCost);
System.out.printf("%n$%.2f",shippingCost);

Antwoord 3, autoriteit 10%

Bekijk DecimalFormat: http://docs. oracle.com/javase/6/docs/api/java/text/DecimalFormat.html

Je doet zoiets als:

new DecimalFormat("$#.00").format(shippingCost);

Of aangezien u met valuta werkt, kunt u zien hoe NumberFormat.getCurrencyInstance()voor u werkt.


Antwoord 4, autoriteit 2%

Opmaakklasse is ook een goede optie. fmt.format(“%.2f”, variabele);
2 hier laat zien hoeveel decimalen u wilt. U kunt dit bijvoorbeeld wijzigen in 4. Vergeet niet de formatter te sluiten.

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();
}

Antwoord 5

Gebruik de klasse DecimalFormat om de dubbele op te maken


Antwoord 6

Je gebruikt de String.format()methode.


Antwoord 7

Oké, een andere oplossing die ik voor de lol bedacht, zou zijn om je decimaalteken in een tekenreeks te veranderen en de tekenreeks vervolgens in 2 tekenreeksen te knippen, één met het punt en de decimalen en de andere met de Int naar de links van het punt. daarna beperk je de String van de komma en decimalen tot 3 tekens, één voor de komma en de andere voor de decimalen. dan gewoon opnieuw combineren.

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;

Daar! Simpel, toch?

Other episodes