java中的long是64位,float是32位.
为什么我将一个long赋值给float却不报错?
eg:   
        float f = 0;
       long l = 154684;
       f = l;我的理解是float应该位数不够而报错啊!
迷惑中~

解决方案 »

  1.   

    long -9.2*10^18  ~~  9.2*10^18float  -3.4*10^38  ~~ 3.4*10^38可以看出来float表示的范围要比long的范围大,尽管float的位数少
      

  2.   

    你取的数太少了,flout相当于20平米的房子,double相当于40平米的房子,如果一个人占一平米,你想你一个人的话,是不是哪个里面也能放的下啊,如果是40个人的话,你想flout是不是就不行了
      

  3.   

    like_wolf 的观点错误的。long和float从根本上讲它们表示的不是一类数,前者是精确值,而后者是非精确值。
    float的字节宽度没有long大,但它的表现值宽度要宽得多,因此long到float是没有问题的。下面的例子能说明问题,x已经是long的最大值了,赋值给y后结果如何自己看吧long x=0x7fffffffffffffffL;
    float y=x;
    System.out.println(x);
    System.out.println(y);
      

  4.   

    曾记得有本书这样说过,
    可以认为float比long范围更大
      

  5.   

    支持wangqiyy 的观点.不是[你取的数太少了]给分给分.CSDN上混了8年现在成0分了,同情下我,
    随便进进我的网站支持一下http://www.91shang.com
      

  6.   

    float可以用指数表示更大的数,但是long就不行
      

  7.   

    float是4个字节,最多只能表示出2^32次个数,但是long是8个字节,可以表示2^64次个数,
    也就是说float的值范围大,但是很多long的数它是表示不了的,只能近似,既使是long转double也
    仍然有很多数不能表示,只能近似,如果是银行系统之类的精确运算,应该用BigDecimal类(题外话);
      

  8.   

    两者表示数据的方式不一样,float采用IEEE的表示法,而long是用位数来控制的范围
      

  9.   

    你所取的long的值太小了...而且float所能表示的数据范围比long类型的要广.所以可以把Long类型的数据直接给
    float类型的数据进行赋值.
      

  10.   

    哈哈,小弟明白了。谢谢各位的帮忙!
    可惜分数不多,只好给最先解出的wangqiyy拉!
    看样子还是我自己看书有思维定式,改进中
    再次感谢!
      

  11.   

    支持一下---------------------------
    内推网 - 内部推荐 求职快线
    http://www.neitui.com
      

  12.   

    redduke1202和wangqiyy的意思是一样的
    long虽然比float长,但是结构不一样,所以float表示的范围会大一些所以楼主
      

  13.   

    欢迎加入本人的QQ群,群号5586686,身份认证输入如:JAVA、JSP、STRUTS等都可以,非软件开发人员勿加,谢谢合作!