public class Test {
public static void main(String[] args) {
System.out.println(float2Int(999998));
System.out.println(float2Int(999999));
System.out.println(float2Int(1000000));
}
static int float2Int(float value) {
value = value * 100;
return Float.valueOf(value).intValue();
}
}
输出结果:
99999800
99999904
100000000
问题来了,为毛999999输出的结果为99999904????
浮点数计算存在误差,主要有两个误差,一个是浮点本身的精度误差,特别是float,它的精度是有限的。还有一个是二进制和十进制转换的误差。
Float.valueOf(VALUE)是把Float字符串转换成float的封装类Float
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位也即一个整数转换为float的话,会表示成科学计数法,由小数(精度)和指数构成,对0,1四舍五入。
http://blog.csdn.net/tingzhushaohua/article/details/76691395
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
你的位数太大了,就会丢失精确度,你用99999结果就是对的
精度有损失。你看看这个方法的源码