试验了一下,呵呵。
---------------------------------------------------------------------------
double d=123456789012345678901234567890.123456789;
                  BigDecimal d1=new BigDecimal(d);
BigDecimal d2=new BigDecimal(String.valueOf(d));
BigDecimal b=new BigDecimal("123456789012345678901234567890.123456789");

System.out.println("\nd1:"+d1);//得不到正确结果,仅17位
System.out.println("\nd2:"+d2);//得不到正确结果,仅17位
System.out.println("\nb:"+b);//OK
----------------------------------------------------------------------------会不会是第一句就出了问题,可能double是64位的根本就放不下这么大的数。
我个人估计这是浮点数的系统存储方式问题,浮点数的基数可能默认仅17位,但好像不大可信,64位的数才花17位存基数,太小气了点吧臆测中候教!

解决方案 »

  1.   

    但是我又怎么能把double d=123456789012345678901234567890.123456789;
    转换成s= "123456789012345678901234567890.123456789"呢?
    根本无法转化啊
      

  2.   

    java.text包中有一个DecimalFormat类,应该对你有帮助
      

  3.   

    基本的数字类型最多才达到128位,也就是说有效数字最多不会超过38位,还有小数点位和符号位。所以不管是double还是decimal都放不下你那个数。
    所以我觉得一开始就只能做为String来存放。
      

  4.   

    我也认为在有些数字类型的设定条件限制下,很多的问题可能出现,
    这样我们就必修考虑找到可以替代的方法来实现,不要一味的停留在那里
     既然这里由于限制不能实现你的输出的话,你就应该找替代办法了。可以试试用string来输出你的问题。
      

  5.   

    以前搞过ACM,有一道题:任意位数的+-*/。就是用字符串储存数字的。
      

  6.   

    以前搞过ACM,有一道题:任意位数的+-*/。就是用字符串储存数字的。
    -----------------------------------------------------------------我学数构也编过这玩意
    自己来实现太繁了。体力劳动!只是希望有现成的东西可以偷工懒一下。呵呵。