为什么Java中的简单浮点数类型float和double不能够进行精确的运算,有时候会出现9.999999这样的数字

为什么啊,double类型的长度不是很高吗?

因为计算机本身是二进制的,你使用float和double这些节约了内存,对精度就没那么多要求了,要是你对精度有要求,java有java.math.BigDecimal浮点和java.math.BigInteger 整型两个类给你使用
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-27
这是典型的精度丢失,当低级类型对高级类型运算的时候回产生精度丢失。
基本类型加宽转换的19种情况
byte → short, int, long, float, or double
short → int, long, float, or double
char → int, long, float, or double
int → long, float, or double
long → float or double
float → double
double X
这里,从byte、short/char、int、long、float、double排列,向后基本上就是加宽转换。排除:byte→char 、short→char、char→short。加宽转换不会损失原数据的总体信息[有时精度会损失,
如int/long→float、long→double时],不产生任何run-time异常。
第2个回答  2011-04-27
double的长度是很长,但是他的大小还是有限制的,不能超过20位吧!大数建议用BigDecimal
第3个回答  2011-04-27
应为计算机存储小数以x/y的分数形式记录的,比如说5/6.你想想10进制的时候1/3是不是一个无线循环小数呢?同理,在二进制环境下,也会出现无限循环。所以说,这个数值是不精确的

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

浮点精度(float、double)运算不精确的原因
浮点精度运算不精确的原因在于计算机内部使用二进制存储数值时的转换过程。十进制与二进制之间转换时,十进制的小数部分往往无法精确地被二进制表示,导致在计算机存储与运算时出现精度损失。以2.1这个十进制数为例,其二进制表示为无限循环的小数部分,即10.0001100110011...,由于计算机内存有限,只能截取这...

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

java 中 float和double类型的加减,会产生错误,怎么办,怎么样解决这个问 ...
浮点运算会产生误差是必然的,因为有些十进制的小数是无法转换成有限位的二进制的,所以就会截取掉后面的无穷二进制位 使用BigDecimal类

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

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

java中为什么两个浮点数相加结果不符合预期
我想你说的是java中的浮点数经过计算后,显示的结果是带有很多0的形式吧。这要从浮点数的概念讲起。在Java中float和double类型的数据,无法精确表示计算结果。这是由于float和double是不精确的计算。例:System.out.println(0.05+0.01);System.out.println(1.0-0.42);System.out.println(4.015*...

这道java题输出结果为什么是9.0
厉害,一石激起千层浪,向你学习,够仔细的,看图!反编译后的class文件:注意看对比后的数据类型前后一致的哦!原码图 明白图:你看,int,float是不是都无法接受啊?唯有double可以接受,因为java默认小数类型就是double类型!应了那句话,当你想比对两个数字的时候,首先要做的就是,统一数据类型!So:现在可以...

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

java float double精度为什么会丢失
浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是 因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用 float 和 double 作精确运 算的时候要特别小心。可以考虑采用一些替代方案来实现。如通过 String 结合 BigDecimal 或 者通过使用 ...

相似回答
大家正在搜