to 楼上,对不起,并不是和你抬扛,但是测试结果确实不对.你的错误出在valueOf参数传递a/b已经是0了,在这个地方精度就丢掉了.下面是证明:
public class TestDivide extends TestCase {
public TestDivide(String name) {super(name);}
public void testDivide() {
double a = 2.0;
double b = 3.0;
BigDecimal temp = BigDecimal.valueOf((long)(a/b), 16);
double c = temp.doubleValue();
assertEquals(0.6666666666666667D, c, 0.0000000000000001D);
}
}
运行测试的结果:
===========================================
.F
Time: 0.011
There was 1 failure:
1) testDivide(TestDivide)junit.framework.AssertionFailedError: expected:<0.6666666666666667> but was:<0.0>
at TestDivide.testDivide(TestDivide.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at com.intellij.rt.execution.junit.TextTestRunner.main(TextTestRunner.java:12)