为什么同样是double类型,输出的小数位数会不同?

代码


package shiyan;

class Circle{
    double r;
    
    Circle(double d){
        r=d;
    }
    
    double getPerimeter() {
        return  2*3.14*r;
    }
    
    double getArea() {
        return 3.14*r*r;
    }
}

public class Shiyan3 {
    public static void main(String []args) {
        Circle c1,c2;
        
        c1=new Circle(5);
        c2=new Circle(10);
        
        System.out.println("c1的周长为:"+c1.getPerimeter());
        System.out.println("c1的面积为:"+c1.getArea());
        
        System.out.println("c2的周长为:"+c2.getPerimeter());
        System.out.println("c2的面积为:"+c2.getArea());
    }    
}

输出结果

img

java的double和float类型在操作中会丧失精度,和预期结果产生偏差

小数运算,用BigDecimal,这是业界规则;

举个例子

```c
3.14*3.14

```会出现小数为多,因为两个数的小数位是14,

```c
3.0*3.14

```就正确显示,因为这里的3.0小数点后是0,总结就是如果出现小数位和小数位运算就会出现小数位比较多,精度的问题

改成5.1和10.1以后是下面这样

img

img

然后,我上面那个问题有点乱码了,我改一下上午的问题:以c1为例,c1的周长是2x3.14x5.0,面积是3.14x5.0x5.0,两者都是传的5.0,为什么会不一样呢?将传的数据改为5.0和10.0也还这样啊,为什么呢?