如何限制双打印的小数位数?

时间:2012-01-17 13:22:49

标签: java double int

这个程序有效,除非nJars的数量是7的倍数,我会得到一个像14.999999999999998这样的答案。对于6,输出为14.08。如何修复7的倍数的异常,以便显示类似$ 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);
   }
}

7 个答案:

答案 0 :(得分:41)

使用DecimalFormatter

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

会给你“0.99”。您可以在右侧添加或减去0以获得更多或更少的小数。

或者使用右侧的“#”使附加数字可选,如#,##(0.30)将尾随0变为(0.3)。

答案 1 :(得分:9)

如果您想在控制台打印/写入双倍值,请使用System.out.printf()System.out.format()方法。

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

答案 2 :(得分:5)

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

你会做类似的事情:

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

或者,由于您正在使用货币,因此您可以看到NumberFormat.getCurrencyInstance()如何为您效劳。

答案 3 :(得分:0)

使用DecimalFormat类格式化double

答案 4 :(得分:0)

您使用String.format()方法。

答案 5 :(得分:0)

Formatter类也是一个不错的选择。 fmt.format(“%。2f”,变量); 2这里显示你想要多少小数。例如,您可以将其更改为4。不要忘记关闭格式化程序。

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

}

答案 6 :(得分:0)

好的另一个我认为只是为了它的乐趣的解决方案是将你的小数转换成一个字符串,然后将字符串切成2个字符串,一个包含点和小数,另一个包含Int到左点。之后,将点和小数的字符串限制为3个字符,一个用于小数点,其他用于小数点。然后重新组合。

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;

有!简单,对吧?