2 u370249526 u370249526 于 2017.08.31 00:14 提问

float转int的问题,跪求大神解释?

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????

5个回答

caozhy
caozhy   Ds   Rxr 2017.08.31 08:49

浮点数计算存在误差,主要有两个误差,一个是浮点本身的精度误差,特别是float,它的精度是有限的。还有一个是二进制和十进制转换的误差。

XianRenShan
XianRenShan   2017.08.31 09:09
Float.valueOf(VALUE)是把Float字符串转换成float的封装类Float
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位也即一个整数转换为float的话,会表示成科学计数法,由小数(精度)和指数构成,对0,1四舍五入。
XianRenShan
XianRenShan   2017.08.31 09:10
orangeTop
orangeTop   2017.08.31 09:19

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
你的位数太大了,就会丢失精确度,你用99999结果就是对的

huang931027
huang931027   2017.08.31 11:12

精度有损失。你看看这个方法的源码

Csdn user default icon
上传中...
上传图片
插入图片