格式化double不包括小数位

时间:2015-01-17 22:55:06

标签: java

以下代码就是我所拥有的。我是一个相当新的程序员,通过我的第一个Java课程,所以请耐心等待。

import salespersonannualcomp.SalespersonCompensationAnnualCalculator;
import java.util.Scanner;

public class SalespersonAnnualSalesInput
{
    public static void main( String[] args)
    {
        Scanner input = new Scanner( System.in );

        //Instantiates a new instance of SalespersonCompensationAnnualCalculator
        SalespersonCompensationAnnualCalculator myAnnualSales = new SalespersonCompensationAnnualCalculator();

        //Prompt for and input total annual sales
        System.out.println( "Please enter the total annual sales:" );

        String yearlySalesString = input.nextLine();
        //Declares yearlySalesInt as the variable that will store the results of Integer.parseInt
        int yearlySalesInt = Integer.parseInt(yearlySalesString);

        //Declares calcResults as the variable that will store the value created by the calcAnnualCompensation method
        double calcResults = myAnnualSales.calcAnnualCompensation(yearlySalesInt);

        //Displays the result of the calculations done for determining total annual compensation
        System.out.println(" Total Annual compensation is $"+ calcResults);
        System.out.println();
        System.out.println(" Total Potential Annual Compensation Chart");

          for(double potentialAnnualSales = yearlySalesInt;potentialAnnualSales<=(1.5*yearlySalesInt);potentialAnnualSales=potentialAnnualSales+5000)
          {
              double calcAnnualCompensation=myAnnualSales.calcAnnualCompensation(potentialAnnualSales);

              System.out.printf( "%f %f%n ",potentialAnnualSales,calcAnnualCompensation);

          }
    } 
}

结果输出如下所示。

Total Annual compensation is $60400.0

Total Potential Annual Compensation Chart
160000.000000 60400.000000
 165000.000000 60725.000000
 170000.000000 61050.000000
 175000.000000 61375.000000
 180000.000000 61700.000000
 185000.000000 62025.000000
 190000.000000 62350.000000
 195000.000000 62675.000000
 200000.000000 63000.000000
 205000.000000 63325.000000
 210000.000000 63650.000000
 215000.000000 63975.000000
 220000.000000 64300.000000
 225000.000000 64625.000000
 230000.000000 64950.000000
 235000.000000 65275.000000
 240000.000000 65600.000000

我希望它不显示小数位,并且所有行都能正确对齐。我输出正确,但我正在努力格式化。

4 个答案:

答案 0 :(得分:1)

使用:

new DecimalFormat("#").format(d)

或者:

(int)Math.round(d)

答案 1 :(得分:1)

你很亲密......

如果您想要小数点后没有位置,并将其排成一行:

System.out.printf( "%10.0f %10.0f%n ",potentialAnnualSales,calcAnnualCompensation);

如果您想要小数点后的两个位置:

System.out.printf( "%10.2f %10.2f%n ",potentialAnnualSales,calcAnnualCompensation);

基本上,10.2f表示十进制左边的10个空格(使用填充空格)和后面的2个空格。同样,6.0f表示小数点左边有6个空格,后面没有空格。您必须使用特定用例的空格数。

答案 2 :(得分:1)

通常使用双倍进行货币计算是一种不好的做法。而是使用BigDecimal。要删除尾随小数,请调用setScale(0);在你的实例上。为了更好地格式化,请使用NumberFormat。

答案 3 :(得分:0)

您可以告诉printf要打印的小数位数以及制作每个字段的宽度。语法如下:%<WIDTH>.<PRECISION>f其中<WIDTH><PRECISION>将被非负整数替换。这两个数字都是可选的,如果您想要默认值,可以将它们保留。

这里我打印一些列宽为10个字符且精度为2位小数的随机数。

public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 6; ++i) {
            System.out.printf("%10.2f%10.2f%10.2f%10.2f%n",
                              100000.0 * Math.random() * Math.random(),
                              100000.0 * Math.random() * Math.random(),
                              100000.0 * Math.random() * Math.random(),
                              100000.0 * Math.random() * Math.random());

        }
    }
}

可能的输出:

  72411.07  11074.66   4722.24  74523.64
    264.89  54015.77  53969.66  61229.94
   5386.74   7939.65  47678.67  24953.68
   4985.14  17769.77  17345.57  38392.68
   4841.93   4103.14   3581.99  74036.73
  52477.30   1846.34  35547.62  10065.36

如果我将格式说明符从%10.2f更改为%10.0f,它只会打印整数部分,而我可能会得到以下输出:

     42116     26756      3293      7957
      1693     23516     83116     39032
      3981     40417     53635     19735
     53504     77468     12341     16178
      4424     81325     79304      5460
     23825      6004     16507     37537

有关printf的更多高级功能,请参阅java.util.Formatter的文档。