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

cut*_*tjm 22 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);
   }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 43

使用DecimalFormatter:

double number = 0.9999999999999;
DecimalFormat numberFormat = new DecimalFormat("#.00");
System.out.println(numberFormat.format(number));
Run Code Online (Sandbox Code Playgroud)

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

或者使用右侧的"#"使附加数字可选,如#.##(0.30)将尾随0降为(0.3).

  • 恕我直言,当你的意思是使用`double`时,不要使用`Double`. (3认同)

ada*_*ost 9

如果要在控制台上打印/写入double值,请使用System.out.printf()System.out.format()方法.

System.out.printf("\n$%10.2f",shippingCost);
System.out.printf("%n$%.2f",shippingCost);
Run Code Online (Sandbox Code Playgroud)

  • `"$%.2f"` 就可以了,因为它不会像 `"$%10.2f"` 那样打印任何前面的空格。无论如何+1。 (2认同)

Jer*_*Orr 5

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

你会做的事情如下:

new DecimalFormat("$#.00").format(shippingCost);
Run Code Online (Sandbox Code Playgroud)

或者,因为您正在使用货币,您可以看到NumberFormat.getCurrencyInstance()它对您有用.