我正试图在java中将double转换为float。
Double d = 1234567.1234;
Float f = d.floatValue();我看到f的值是
1234567.1我不想打印一个字符串值的浮点。我只是想知道,在将double转换为float时,不丢失任何精度的最大位数是多少。我可以在java中显示8个以上的有效数字吗?
发布于 2015-08-27 19:40:15
float的精度约为7小数点,但由于浮子是以二进制形式存储的,这是一种近似。
要演示所述浮点值的实际精度,请尝试如下:
double d = 1234567.1234;
float f = (float)d;
System.out.printf("%.9f%n", d);
System.out.printf("%.9f%n", Math.nextDown(f));
System.out.printf("%.9f%n", f);
System.out.printf("%.9f%n", Math.nextUp(f));输出
1234567.123400000
1234567.000000000
1234567.125000000
1234567.250000000如您所见,对于这个数字,有效的十进制精度大约是1位小数位,或8位数字,但是如果您使用数字9876543.9876运行代码,您将得到:
9876543.987600000
9876543.000000000
9876544.000000000
9876545.000000000只有7位数的精确度。
https://stackoverflow.com/questions/32257543
复制相似问题