Java中int转float可能会损失精度,但是int转double为什么也会损失精度?

Java中int转float可能会损失精度,但是int转double为什么也会损失精度?

float和double的精度就是个笑话,单单用来运算都会出错,当然也是存储的问题。
你要纠结于精度,就用bigdecimal。这个是绝对没有任何精度问题,
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-31
你想啊,用double表示1是1.00(举个例子后面具体几个忘了)int就是1.显然后面的00没了.虽然没有数值,但是在计算机内存中还是要要占用内存地址的追问

你说反了吧

追答

哦对啊,反了

第2个回答  2013-10-31
因为float和double都是浮点型
第3个回答  2013-10-31
int是整型变量,而float和double是浮点型。追问

?我知道是浮点型。float会损失因为其整数部分为16bit而int是32bit,但是double整数是64bit

第4个回答  推荐于2017-12-16
float和double只是位数不一样,对浮点数的表示方式都是一样的。float会损失精确,doube必然也会损失精度。
补充:
java 的浮点类型都依据 IEEE 754 标准。IEEE 754 定义了32 位和 64 位双精度两种浮点二进制小数标准。
IEEE 754 用科学记数法以底数为 2 的小数来表示浮点数。
对于32 位浮点数float用 第1 位表示数字的符号,用第2至9位来表示指数,用 最后23 位来表示尾数,即小数部分。
float(32位):
对于64 位双精度浮点数,用 第1 位表示数字的符号,用 11 位表示指数,52 位表示尾数。
double(64位):
都是分为三个部分:
(1) 一个单独的符号位s 直接编码符号s 。
(2)k 位的幂指数E ,移码表示 。
(3)n 位的小数,原码表示 。
当下面情况出现是则无法精确表示:

1.幂数不够表示了:这种情况往往出现在数字太大了,超过幂数所能承受的范围,那么这个数字就无法表示了。如幂数最大只能是10,但是这个数字用科学计数法表示时,幂数一定会超过10,就没办法了。
2.尾数不够表示了:这种情况往往出现在数字精度太长了,如1.3434343233332这样的数字,虽然很小,还不超过2,这种情况下幂数完全满足要求,但是尾数已经不能表示出来了这么长的精度。本回答被网友采纳

Java中int转float可能会损失精度,但是int转double为什么也会损失精度...
float和double的精度就是个笑话,单单用来运算都会出错,当然也是存储的问题。你要纠结于精度,就用bigdecimal。这个是绝对没有任何精度问题,

int 转 float 为什么有时会丢失精度
所以当int转换为float时,是由准确值变成了近似值,所以会丢失精度。比如int 的1000,转换为浮点型时,可能会被存成1000.00000000001,用来计算或者输出时看不出区别,实际上是已经有变化了。在32位和64位的编译器中,int和float都是占四字节。int可以表示范围为-2147483648~2147483647。float可以表示-3....

java float double精度为什么会丢失
因为十进制里面的有限小数在二进制里面是无线循环的,无限循环小数进行运算必然要四舍五入,这样肯定会导致精度丢失

java float double精度为什么会丢失
float和double的精度是由尾数的位数来决定的,float尾数少精度低,double尾数多精度高,好比如2.3和2.321456987899的区别;当精度高的向精度低的强行转换,就会丢失精度,就是说2.321456987899发生强转后,会变成2.3,后边的小数位都丢失了,精度由高也就变低了,也就是精度丢失;java初学者,希望能帮...

java float double精度为什么会丢失
因为机器的表示位数是固定的,是有限的,在运算过程,容意溢出而出现机器无法使用有限位数表达的数,溢出部分被截去,精度就丢失了

java float double精度为什么会丢失
由于对float或double 的使用不当,可能会出现精度丢失的问题。问题大概情况可以通过如下代码理解:public class FloatDoubleTest { public static void main(String[] args) { float f = 20014999;double d = f;double d2 = 20014999;System.out.println("f=" + f);System.out.println("d=" + ...

java,为什么float赋值时加f,short,byte却不用?
4这个精度 所以一般int转double 加d 转float加f 但是 short 和byte都是比int还低位的类型 好比 你把3转成 3。4大不了你是加了个0。4只是更加精确没有损失精度 所以不用在数字后面加转换字符 也就是高精度转低精度 不需要加后缀转换字母 低精度转高精度由于可能会造成精度损失所以加标注强转,我...

java中double类型数据加减操作精度丢失问题及解决方法
首先,需要明白的是,Java中的double和float类型用于表示近似数值,它们在进行运算时可能会因舍入误差而产生精度丢失。因此,在进行商业计算或要求精确度较高的计算时,应避免使用double和float,而是选择Java.math.BigDecimal类。BigDecimal类提供了多种构造方法,其中两个最为常用的是:BigDecimal(double val...

为什么Java中的简单浮点数类型float和double不能够进行精确的运算,有...
因为计算机本身是二进制的,你使用float和double这些节约了内存,对精度就没那么多要求了,要是你对精度有要求,java有java.math.BigDecimal浮点和java.math.BigInteger 整型两个类给你使用

java float double精度为什么会丢失
很明显这样是不能精确表示所有小数的,因此在存储的过程中就会丢失精度,比如x=0.3 其实这个丢失精度只是相对十进制而言的,十进制同样不能精确表示所有小数,例如1\/3...要精确地进行计算,请使用BigDecimal,并在计算时约束好小数位(比如精确到2位小数)。float double只能用于科学计算。

相似回答