关于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回答
同学你好。float在内存中是按照二进制存储的,32位单精度浮点型数中,符号位占1位,尾数占23位,阶数占8位。
并且float的尾数位(也即是小数点之后,E之前)是23bit,2的23次方约为10的6.923次方。也就是单精度浮点数转化为10进制后,小数可以保证至少6位、最多7位是精确的。也就是和原来的数是一致的。
同学的情况,是有6位保持一致“123456”,到“7”时,由于精度问题,转为10进制后已于原数值不同。
如果解答了同学的疑问,望采纳~
祝学习愉快~
相似问题