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有对浮点型数字进行处理。
关于小数需要去了解二进制及补码一些知识。