使用 BigDecimal (java.math.BigDecimal) 相除.

解决方案 »

  1.   

    double a = 2.0;
    double b = 3.0;
    BigDecimal temp = BigDecimal.valueOf(a/b, 16);
    double c = doubleValue();
      

  2.   

    楼上错了, valueOf(long, int) 除法能这么用吗?
    你的结果是多少?
    0.0000000000000000应该这样:
    BigDecimal r = new BigDecimal(2.0).divide(new BigDecimal(3.0), 17, BigDecimal.ROUND_HALF_UP);
            System.out.println(r);
    结果是:
    0.66666666666666667
      

  3.   

    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)FAILURES!!!
    Tests run: 1,  Failures: 1,  Errors: 0
      

  4.   

    不好意思,上面写错了,应该是这样的
            double a = 2.0;
            double b = 3.0;
            BigDecimal temp = new BigDecimal(a/b);
            temp = temp.setScale(16, BigDecimal.ROUND_HALF_UP);
            double c = temp.doubleValue();