如何限制为双精度值打印的小数位数?

2022-09-01 12:34:33

这个程序有效,除非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);
   }
}

答案 1

使用十进制格式:

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

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

或者在右侧使用“#”使其他数字可选,例如在#.##(0.30)中,会将尾随的0删除为(0.3)。


答案 2

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

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

推荐