打印命令输出

时间:2013-11-05 23:08:51

标签: java c floating-point

以下是C程序的代码片段。

#include <stdio.h>

int main(int argc, char *argv[]) {

    float kk=2*3/4+4/4+8-2;
    printf("%f",kk);
}

该程序的输出为8.000000

用JAVA 8编写的相同代码。

class Untitled {
public static void main(String[] args) {
float kk=2*3/4+4/4+8-2;
System.out.println("\n----- Converting to the precision -----\n");
System.out.printf("%f",kk);
System.out.println("\n----- Converting to the Integer -----\n");
System.out.println(kk);
    }
}

使用println方法输出此程序为8.0。 printf方法以适当的精度返回值。从printstream文档中,我不了解编译器如何失去精度。我希望会有一些警告或某些东西会通知失去的精确度。,有关如何识别这些类型的陷阱的任何想法?提前致谢。

4 个答案:

答案 0 :(得分:4)

如果您参考C中的printf和Java中的System.out.println的文档,您将看到它们以不同的方式格式化输出。这是因为它们完全不同,我不确定为什么你期望它们产生相同的结果。

如果要在Java中使用printf样式格式化,请考虑使用String.format()格式化输出,或使用System.out.printf(),这仍然可能要求显式格式宽度与{{的默认行为相同1}}在C(which is 6 decimal places if not explicitly specified,因此你的printf)。

答案 1 :(得分:1)

您也可以在Java中使用printf。取代

System.out.println(kk);

System.out.printf("%f", kk);

你不会因为Java而失去精确度;只是有不同的输出格式。

答案 2 :(得分:1)

在java和C中,代码float kk=2*3/4+4/4+8-2;将右侧视为整数....因为没有理由将它们强加于其他任何东西。

因此,答案将始终为整数值(整数除法,例如2*3/4将给出结果1,即使在浮点数为1.5)。

因此,无论如何都没有任何浮点精度,所以没什么可失去的。

答案 3 :(得分:0)

你实际上并没有失去那么多精确度。你可能会失去一点(我不会深入讨论细节),但你只得到8.0的原因只是打印命令的差异。 JAVA的四舍五入,而C的轮回并不那么快。

尝试以浮点形式打印不是整数的东西(例如,将你的答案除以11),它应该根据需要显示额外的数字。

相关问题