关于一个十分简单的Java编程的问题~

来源:百度知道 编辑:UC知道 时间:2024/05/07 08:37:41
看似简单,但是我还是弄不明白为什么
以下是我用BLUEJ编写的一段JAVA程序, 我求c=a-b 即 5 - 3.2 = 1.8
public class o
{
public static void main(String[] args)
{
int a=5;
double b=3.2,c=a-b;
System.out.println(c);
}
}
可为什么执行这段程序的时候系统显示的答案是1.79999999998 为什么啊?
我又试了次 将a改为1 求c=b-a, 即3.2 - 1 = 2,2
public class o
{
public static void main(String[] args)
{
int a=1;
double b=3.2,c=b-a;
System.out.println(c);
}
}
而这次系统返回的答案正确 是2.2, 为什么会存在这种差异 难道int-double 和 double-int 有区别吗? 区别在哪里? 请详细说明! 谢谢

int-double 和 double-int 没有区别的,lz可以试试:
System.out.println( 3.2-5 ); // -1.7999999999999998

得到的结果也是不精确的。
这是因为 3.2 是double 型,在计算机中是不精确存储的,它们两个计算前会都转换为 double型,计算结果为 double型。

给你看个有趣点儿的例子:
System.out.println( (float)3.2-5 ); // -1.8
这个就会返回正确的答案。
从这行程序可以看出,(float)3.2,5 两个数计算的时候都会被转换为 float,进行计算,然后计算结果为 double 型。

以前没注意,想不到居然有这样的情况

难道java浮点数的运行精度这么差??