当前位置: 代码迷 >> J2SE >> int 转float 被截断有关问题
  详细解决方案

int 转float 被截断有关问题

热度:173   发布时间:2016-04-23 20:16:23.0
int 转float 被截断问题

import java.awt.*;
import java.awt.geom.Rectangle2D;

import javax.swing.*;
 
public class Test
{
    public static void main(String[] args)
    {
        int a=2147483647;
        float b=a;
        System.out.println(a);
        System.out.println(b);
        
        
        a=214748364;
        b=a;
        System.out.println(a);
        System.out.println(b);
       
       
    }
}


输出为:
2147483647
2.14748365E9
214748364
2.14748368E8

自己的猜测 
输出2感觉是输出1的进位的结果
但是输出3和输出4就完全不懂是什么情况了 我看的是corejava教材 
上面写float范围是32位 
------解决思路----------------------
这个浮点数在计算机中如何保存有关,具体实现的,楼主可以参考http://www.math.byu.edu/~schow/work/IEEEFloatingPoint.htm
------解决思路----------------------
首先:你自己猜测,输出2感觉是输出1的进位的结果,计算机的运算可不能这么猜测,必须要懂他的原理
找了找资料
1,先了解float在内存中是怎么存储的
        float有32位,存储如下.
        
2,把214748364这个数字转为2进制
   1100110011001100110011001100
3,然后变成这样,从最后1位移动27才形成这样的效果,转化的时候必须形成1.什么的效果
   1.100110011001100110011001100
4.按照1步骤的说法
   1   10011010  10011001100110011001100
符号 指数             省略了后4位组成的
5,这个好像是内存存储float的方式(为啥说好像呢,因为我也是刚刚看了下资料来的,所以我也不确定对不对)
6,因为省略了后四位,所以精度就错了
7,开始反推回去
第一位说明是正数
后八位代表指数10011010  - 127 = 154 - 127 = 27 为啥减127呢,看资料看的
后面的数加上1.  为 1.10011001100110011001100 ,指数27为正数,所以小数点后移27位,遇到不足的情况(我也不知道补啥)
我就补1了,变为1100110011001100110011001111 十进制为214748367.  2.14748367E8 ,跟你的差1,不知道为什么
  相关解决方案