有些在十进制中的有限小数,在二进制中变成了无限小数。
public static void main(String[] args) {
Float a = 0.01f;
System.out.println(a);
System.out.println(Float.toHexString(a));
Double d = 0.01d;
System.out.println(d);
System.out.println(Double.toHexString(d));
}
结果
0.01
0x1.47ae14p-7
0.01
0x1.47ae147ae147bp-7
也可以通过十进制数转二进制数的算法来看
a=0.01
输出“0.“
while(a的小数位不全为0){
a=a*2;
如果a的整数位为0,输出0;
如果a的整数位为1,输出1,a=a-1;
}
最后得到的就是小数部分的二进制表示了
public class TestInfinit {
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("0.01");
BigDecimal bigDecimal2 = new BigDecimal("2");
BigDecimal bigDecimal1 = new BigDecimal("1");
int i = 0;
while (i<1000) {
bigDecimal = bigDecimal.multiply(bigDecimal2);
if(bigDecimal.compareTo(bigDecimal1)<0){
System.out.print("0");
}else{
bigDecimal = bigDecimal.subtract(bigDecimal1);
System.out.print("1");
}
i++;
}
}
}
结果有1000位