黑马程序员技术交流社区

标题: double转int的问题 [打印本页]

作者: 王靖远    时间: 2013-5-24 22:33
标题: double转int的问题
本帖最后由 王靖远 于 2013-5-25 10:29 编辑

int i ;
double db;
i = (int)Math.pow(db, n);
这种方法的好处是不会丢失小数点后面的值,不过当double值过大时,即大于int类型值得范围时还是会改变原来的值;

这是我在网上看到的。求解释一下。为什么不会丢失小数点后面的值,我实验是丢了的。

作者: clp    时间: 2013-5-24 23:18
你的题目给的不完整,不能够理解那个函数代表的意思,一般来说double类型的数值转换成int型的,精度必定会损失的,否则就没什么区别了
作者: slatop@qq.com    时间: 2013-5-24 23:44
又是数据类型,研究这个你要先明白内存分布。
一个内存单元就是一个关合线路,关为0,合为1,你可以把一个内存单元看做是一个格子 ,里面有电就是1没电就是0.每一个单元格子,被称为一个位,8个位是一个字节,
INT型:
一个int是4个字节,就是4*8=32个盒子,根据这32个盒子里有的没电有的有电,来代表一个2进制数。因为是32个开关,所以最大数是32个1,因为java中没有unsigned也就是无符号类型,所以第一个1必须用来代表是正数还是负数(1为负0为正)剩下31个1用来代表值,31个1转为十进制就是2147483647,最小是-2147483648,正数尾数是7,负数是8,因为还有一个0,算在正数里,正数和负数正好相同。
double型:
一个double是8个字节也就是8*8=64个盒子,其中第一位用来代表是符号位(1为负0为正),后面11位是指数位,其余52位是有效数字位,符号位就代表正负的没啥说的。指数位就是科学计数法中的E。记得应该是高中数学有教吧。指数位越大小数点越向左移,越小越向右移。有较数字位并不是说的最大值,说的是可以代表的最精确最长位数,double的有较位好像是15到16位吧,记不清楚了

int型根本就没有指数位,你怎么让他代表小数,double转int,从一个有指数转到一个没指数,小数能不丢才怪。
另外一般情况下float就够用了,有6到7位的有较数字,double比float大一倍,内存占用了多了一倍,运算速度上double也慢很多,没必要的情况下一般不使用。


作者: 王靖远    时间: 2013-5-25 00:33
clp 发表于 2013-5-24 23:18
你的题目给的不完整,不能够理解那个函数代表的意思,一般来说double类型的数值转换成int型的,精度必定会 ...

用数组转可以不损失精度哦。
作者: 王靖远    时间: 2013-5-25 00:34
slatop@qq.com 发表于 2013-5-24 23:44
又是数据类型,研究这个你要先明白内存分布。
一个内存单元就是一个关合线路,关为0,合为1,你可以把一 ...

网上说用数组转,可以不丢失精度哦。




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