我必须做一个实现来计算要用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)."
所以我该怎么做?谢谢你提前帮忙!
问题是33.4096并不完全由a表示double,也不是1.33,也不是3.14.此外,乘法引入了自己的错误.因此,assertEquals需要被基本上意味着"断言价值非常接近我们预期"的东西取代.
JUnit assertEquals(expectedValue, actualValue, errorPermitted)用于比较双打,这是你应该在这里使用的.
通常,double对于使用表示为小数的数字进行精确算术的数据类型选择较差,因为它存储数字的二进制表示.如果您想要具有精确小数的精度,请BigDecimal改用.