关于float后的小数位数

来源:1-3 Float在JVM的表达方式及使用陷阱

皮皮怪下士

2019-07-31 22:35:45

老师您好,您在课上说的是float类型的数据小数点后最多存7位,但是我在测试的时候却出来了个8位的,而且最后两位很奇怪,下面是测试代码,请老师指点

public class Test {
	public static void main(String[] args) {
		float f1=412345678f;
		float f2=f1+1;
		if(f1==f2) {
			System.out.println("yeab");
		}else {
			System.out.println("noob");
		}
		System.out.println(f1);
		System.out.println(f2);
	}
}

输出结果:

yeab

4.12345664E8

4.12345664E8


写回答

1回答

芝芝兰兰

2019-08-01

同学你好。float在内存中是按照二进制存储的,32位单精度浮点型数中,符号位占1位,尾数占23位,阶数占8位。

并且float的尾数位(也即是小数点之后,E之前)是23bit,2的23次方约为10的6.923次方。也就是单精度浮点数转化为10进制后,小数可以保证至少6位、最多7位是精确的。也就是和原来的数是一致的。

同学的情况,是有6位保持一致“123456”,到“7”时,由于精度问题,转为10进制后已于原数值不同。

如果解答了同学的疑问,望采纳~

祝学习愉快~


0

0 学习 · 8263 问题

查看课程