为什么print和printf默认显示不同的小数位数

时间:2014-09-22 11:42:13

标签: java

作为我学位的一部分,我需要参加Java编程课程;我是一位经验丰富的C#开发人员,所以我对C#的期望可能与Java的实际工作方式相冲突。该课程的教授无法给我一个很好的理由,为什么print和printf产生不同的结果,所以我转向互联网。

正如标题所暗示的,当我在一个非常基本的Java应用程序中使用printf和print时,我得到了不同的输出。提示用户输入三个值:起始有机体的数量(双倍),总体变化百分比(双倍)以及总体乘以(int)的天数。然后我运行计算并将值输出到屏幕,如下所示:

    for(int x = 1; x < days; x++)
    {
        startingOrganisms = startingOrganisms + (startingOrganisms * (increasePercent));
        System.out.printf("%d\t\t%f\n", (x + 1), startingOrganisms);    
    }

问题是这会产生与我刚才不同的输出:

  System.out.print((x + 1) + "\t\t" + startingOrganisms+ "\n");

下图显示了第一个代码示例生成的内容。我的期望是print和printf都会产生相同的结果,但事实并非如此。谁能解释一下有什么区别?粗略搜索谷歌并没有改变任何事情。

enter image description here

4 个答案:

答案 0 :(得分:2)

默认情况下,printf显示6位小数

您可以通过显式指定精度来控制要显示的小数位数。例如,您可以执行12位十进制数字:

printf("%.12f", val);

API参考:http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dndec

如果您希望获得等效输出System.out.println但由于某种原因想继续使用printf,那么您可以执行以下操作:

System.out.printf("%d\t\t%f\n", (x + 1), Double.toString(startingOrganisms));

答案 1 :(得分:0)

print只打印出消息。 printf打印出一个格式化的字符串,所以自然你应该考虑使用不同的

答案 2 :(得分:0)

这是因为默认情况下double or float printf打印数量最多为小数点后6位。如果要通过printf控制要打印的小数位数,则需要指定精度。 System.out.println打印精确的double / float值而不添加一些默认小数点。

e.g。

    double d = 1.0;
    // it will print 1.000000
    System.out.printf("%f\n", d);
    //1.0
    System.out.printf("%.1f", d);
    //1.0
    System.out.println(d);

答案 3 :(得分:0)

说到double和float,printf默认打印最多6个十进制数字。因此,为了修改该结果,您需要指定要在屏幕上打印的位数。上面的代码最多可打印10位数。

例如:

 printf("%.10f", val);