一个JAVA float和 double相除结果与计算器计算不等的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/12 03:28:21
public class Promotion{
public static void main(String args[]){
byte b=10;
char c='a';
int c1=(int)c;
int i=90;
long l=555L;
float f=3.5f;
double d=1.234;
float f1=f*b;
int i1=c+i;
long l1=l+i1;
double d0=f1/i1;
double d1=f1/i1-d;
System.out.println("c="+c);
System.out.println("c1="+c1);
System.out.println("f1="+f1);
System.out.println("i1="+i1);
System.out.println("l1="+l1);
System.out.println("d0="+d0);
System.out.println("d1="+d1);
}
}

程序如上,运行的结果:
c=a
c1=97
f1=35.0
i1=187
l1=742
d0=0.1871657818555832
d1=-1.0468342181444168

用电脑自带的计算器计算结果如下:
d0=0.18716577540106951871657754010695
d1=-1.046834224598930481283422459893

注意:程序运行计算结果和计算器计算结果d0在小数点后第八位出现不同.
这是什么原因造成的呢?请高手赐教~谢谢
朋友刚才告诉我说:
后面的都不是有效位
在电脑中运行的后面的数字都只是

很多语言都是这样。浮点数在计算机中是有误差的。所以必须使用专门的方式计算。
在Java中,需要使用BigDecmal,而且需要在构造参数使用String类型。

这个不是什么原因造成的,这个就是因为处理的算法不同造成的

java 的float有问题 ,会失精(丢失精度),double好一点。
如果想要高精度的话就用BigDecimal