使用Java和JUnit实现球体的公式体积?

ula*_*aan 0 java junit

我必须做一个实现来计算要用JUnit测试检查的球体的体积,但是有一些错误.公式是正确的,但是当我测试它时,它不起作用:

class VolumeSphere.java

public class VolumeSphere {
    public static double volsph(double j) {     
        double volume;  
        double const = 1.33;    
        double phi = 3.14;

        volume = const * phi * (j * j * j);
        return volume;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后这个测试文件:

VolumeSphereTest.java

import junit.framework.*;

public class VolumeSphereTest extends TestCase {
    public VolumeSphereTest(String name) {
        super(name);
    }

    public void testSimple() {
        assertEquals(33.4096, VolumeSphere.volsph(2.0));
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行JUnit测试时,它说"预期:(33.4096)但是:(33.4096000005)."

所以我该怎么做?谢谢你提前帮忙!

Daw*_*ica 5

问题是33.4096并不完全由a表示double,也不是1.33,也不是3.14.此外,乘法引入了自己的错误.因此,assertEquals需要被基本上意味着"断言价值非常接近我们预期"的东西取代.

JUnit assertEquals(expectedValue, actualValue, errorPermitted)用于比较双打,这是你应该在这里使用的.

通常,double对于使用表示为小数的数字进行精确算术的数据类型选择较差,因为它存储数字的二进制表示.如果您想要具有精确小数的精度,请BigDecimal改用.