文章目录
二进制浮点数转换为十进制浮点数
十进制浮点数转换为二进制浮点数
浮点数的存储
float类型在计算机中的存储形式中指数为什么要加127,而double类型要加1023?
以float为例,计算机表示单精度浮点数时,是用8位去存储指数部分,即表示0-255,但我们同样需要有负指数,正负指数的位数量为了均等,各自一半,-127-128。0是特殊点,特殊处理。储存时候会加上127,这样就刚刚好是0~255,就能很好的储存了,不然,不移量的话需要判断符号位来判断数值的正负。
浮点数加减运算时可能精度丢失的原因
public static void main(String[] args) {
System.out.println(2.0f-1.5f);//0.5
System.out.println(2.0f-1.4f);//0.6
System.out.println(2.0f-1.3f);//0.70000005
}
如何避免精度丢失
使用float和double进行运算时可能会有进度丢失,因此实际开发中不建议直接使用float和都被进行运算,而是使用new BigDecimal(String str)来解决:
public static void main(String[] args) {
System.out.println(2.0f-1.3f);//0.70000005
System.out.println(new BigDecimal(2.0f).subtract(new BigDecimal(1.3f)));//0.7000000476837158203125
System.out.println(BigDecimal.valueOf(2.0f).subtract(BigDecimal.valueOf(1.3f)));//0.7000000476837158
//new BigDecimal(String str)这种方式可以解决浮点数问题
System.out.println(new BigDecimal(String.valueOf(2.0f)).subtract(new BigDecimal(String.valueOf(1.3f))));//0.7
}