Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java float数据类型的System.out.printf()_Java_Printf - Fatal编程技术网

Java float数据类型的System.out.printf()

Java float数据类型的System.out.printf(),java,printf,Java,Printf,我这里有一个非常简短的代码片段: public class FormatFloat { public static void main(String[] args) { float x = 12.345f; System.out.printf("%18.7f%s", x, "\n"); System.out.printf("%18.8f%s", x, "\n"); System.out.printf("%18.10f%s",

我这里有一个非常简短的代码片段:

public class FormatFloat {
    public static void main(String[] args) {
        float x = 12.345f;
        System.out.printf("%18.7f%s", x, "\n");
        System.out.printf("%18.8f%s", x, "\n");
        System.out.printf("%18.10f%s", x, "\n");
        System.out.printf("%18.15f%s", x, "\n");
    }    
}
我认为输出是

        12.3450000
       12.34500000
     12.3450000000
12.345000000000000
但是我越来越

        12.3450003
       12.34500027
     12.3450002670
12.345000267028809

有谁能告诉我背后的原因吗?

这个问题与IEEE 754二进制浮点表示有关

有关您的问题的完整说明,请参阅链接。

试试看

double x = 12.345;
System.out.printf("%18.7f%n", x);
...

浮点精度太低

这是重复的(我会马上寻找正确答案)。同时,请访问以获取答案。@nhahdh:这并不能解决问题,只会使问题变得不那么明显。如果您确实/需要/示例的精度,并且不太关心性能,您可以查看
java.math.BigDecimal
@MohammadFaisal:不仅仅是查看,但是
float
的尾数是24位,可以转换为大约7位精度的十进制数字(24*log2/log10>7)。@MohammadFaisal:通过实际计算修正了这个数字