黑马程序员技术交流社区

标题: 关于double 类型可以转换成int类型疑问 [打印本页]

作者: べPNヤ    时间: 2013-8-11 19:51
标题: 关于double 类型可以转换成int类型疑问
本帖最后由 べPNヤ 于 2013-8-11 22:29 编辑

int 类型是4字节 double  类型是 8字节,知道可以转换 但是还有点不明白 这个长的数据类型为什么可以转换成比它短的?如果 long类型转换成 float类型呢? 会损失精度吗?
作者: 如果我长大了。    时间: 2013-8-11 20:26
转换成比它短的数据类型的时候,自己砍掉后面的部分就可以了的。就好比把一个木棍砍断只留一部分就可以了。这只是我的理解。
作者: litaojisuanji    时间: 2013-8-11 21:22
把double类型赋值给int类型的时候,因为可以会损失精度,所以不给赋值,编译就会出错; 如果用强制转换,就是不管里面值是多少强制转换成int类型,就像楼上说的好比把一个木棍砍断只留一部分。
作者: 李江    时间: 2013-8-11 22:11
今天老师刚讲过哈哈:是这样的,double转成int是:除去符号位,即从次高位开始往下数32位,截取,假如为正数,如果截取的都是0,精度不会损失,截取的32位中含1就会损失精度,long转float是先对long进行变形,变成float型数据的表示形式(long和float的表示形式是不一样的),long转成float是不会损失精度的,因为float的表示范围比long大。long表示的数,float肯定是能表示的。
作者: べPNヤ    时间: 2013-8-11 22:17
又看了下老师的视频个人觉得是这样:double转换成int 是强制转换,强制转换可以把字节高的转换成字节低的,但是字节高的如果超出低字节的值范围 转换后的值会与以前的值没关系,long转换成float应该不会损失精度,因为float的内存表示方法不一样 其表示范围比long 大 不会损失精度, 希望高手指点下
作者: べPNヤ    时间: 2013-8-11 22:20
graspDN 发表于 2013-8-11 22:11
今天老师刚讲过哈哈:是这样的,double转成int是:除去符号位,即从次高位开始往下数32位,截取,假如为正数 ...

有道理,截取的时候是从符号位后边开始截取的
作者: 一只文字    时间: 2013-8-11 22:57
java数据类型的转换一般分三种,分别是:
(1). 简单数据类型之间的转换

    在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double


简单数据类型之间的转换又可以分为:
  ●低级到高级的自动类型转换
  ●高级到低级的强制类型转换
  ●包装类过渡类型能够转换



低级变量可以直接转换为高级变量,笔者称之为自动类型转换,例如,下面的语句可以在Java中直接通过:
    byte b;
    int i=b;
    long l=b;
    float f=b;
    double d=b;

如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,例如r
    char c='c';
    int i=c;
    System.out.println("output:" i);
输出:output:99;


对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。
    short i=99;

    char c=(char)i;

    System.out.println("output:" c);
输出:output:c;


但根据笔者的经验,byte,short,int三种类型都是整型,因此如果操作整型数据时,最好统一使用int型。



将高级变量转换为低级变量时,情况会复杂一些,你可以使用强制类型转换。即你必须采用下面这种语句格式:
    int i=99;

    byte b=(byte)i;

    char c=(char)i;

    float f=(float)i;
可以想象,这种转换肯定可能会导致溢出或精度的下降,因此笔者并不推荐使用这种转换。


1、float型转换为double型:

float f1=100.00f;
Float F1=new Float(f1);

//F1.doubleValue()为Float类的返回double值型的方法
double d1=F1.doubleValue();



2、double型转换为int型:

double d1=100.00;
Double D1=new Double(d1);
int i1=D1.intValue();



3、int型转换为double型:

int i1=200;
double d1=i1;






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2