java小程序 为什么计算结果错误????

来源:百度知道 编辑:UC知道 时间:2024/06/21 18:11:36
public static void main(String [] args){
double longth =1.9;
double width = 0.3;
double area = longth * width;
double perimeter =2*(longth + width);
System.out.println("矩形的面积是:" + area);
System.out.println("矩形的周长是: " + perimeter);
}

计算结果是矩形的面积是:0.57
矩形的周长是: 4.3999999999999995

为什么周长不是4.4,而是这么长的一个数??请大家讲解下,谢谢
double perimeter2 = Math.floor(perimeter*10+0.5)/10;
为什么要(perimeter*10+0.5)/10呢?大概明白是保留小数一位,这个具体怎么用呢?

public static void main(String [] args){
double longth =1.9;
double width = 0.3;
double area = longth * width;
double perimeter =2*(longth + width);
double perimeter2 = Math.floor(perimeter*10+0.5)/10;
System.out.println("矩形的面积是:" + area);
System.out.println("矩形的周长是: " + perimeter2);
}

Math.floor(double a)返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
比如说一个说是4.3999,Math.floor(4.3999)==4
那么,Math.floor(4.3999*10+0.5)==44,44除以10就等于4.4
至于为什么要加0.5,是为了达到四舍五入的目的。如果要保留两位小数,就是Math.floor(4.3999*100+0.5)/100,以此类推。

浮点运算自动就会这样,比如两个浮点是不能比较相等的,即使看起来相等的,因为有些位我们看不到,只能通过让相减求的绝对值小于某一个很小的值

试试用double perimeter =2.0*(longth + width);

浮点运算本身就有这样的问题。建议你浮点运算取几位有效值,免的以后取整还会少一个数

你定义的是 double、

计算机里的double 类行都是模理的 象1 用了0.9999999很多模理出来的