浮点数在计算机中是采用二进制科学计数法存储的。
一、浮点数转换成二进制
52.1=110100.0001100110011(小数部分不能完全转换)
二、表示成二进制科学计数法
1.101000001100110011 * 2^5
三、按IEEE754进行数据存储
因此,再将内存中的数据转换成十进制输出来的数据不是完整的52.1,只是非常接近它。
首先,需要将科学计数法转换成一下:
例如:
BigDecimal bd = new BigDecimal("3.40256010353E11")
然后转换成字符串:
String str = bd.toPlainString()
如果这个数字的长度是在int的范围内的话,是可以转换成int类型:
int a = Integer.parsInt(str)
如果这个数字的长度不是在Int范围内的话,得到的就不是你想要的数字了。
数字在以浮点数储存到内存中后超出精度外的数据都丢失了呀,还能有方法找回?
单精度4字节32位
双精度8字节64位
他们所能表达的十进制有效数字就是7位或者15位,不可能再多,否则就不是浮点数了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)