给double对象强制赋值float类型的值 中出现的问题。


double a=1.1f;  
//程序不报错,是自动类型转化吗?
System.out.println("a="+a);

打印结果为:a=1.100000023841858;
为什么不是1.1?

字符串拼接数子, 数字会被转为字符串输出。字符串就是那么长。
如果你直接输出数字,就是1.1

//程序不报错,是自动类型转化吗?
        float f1 = 1.1f;
        //浮点型的二进制:111111100011001100110011001101
        System.out.println(Long.toBinaryString(Float.floatToIntBits(f1)));
        double d1 = 1.1;
        //double的二进制:11111111110001100110011001100110011001100110011001100110011010
        long bits = Double.doubleToLongBits(d1);
        System.out.println(Long.toBinaryString(bits));
        //将float转换为double:111111100011001100110011001101 + 00000000000000000000000000000000
        
        System.out.println(a);
        
        System.out.println(d1==a);//false,他的二进制是不相等的

浮点型参与计算,都容易丢失精度。所以很多地方使用BigDecimal去参与金额的运算。BigDecimal有对浮点型数字进行处理。
关于小数需要去了解二进制及补码一些知识。