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:通过实际计算修正了这个数字