试验了一下,呵呵。
---------------------------------------------------------------------------
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位存基数,太小气了点吧臆测中候教!
---------------------------------------------------------------------------
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位存基数,太小气了点吧臆测中候教!
转换成s= "123456789012345678901234567890.123456789"呢?
根本无法转化啊
所以我觉得一开始就只能做为String来存放。
这样我们就必修考虑找到可以替代的方法来实现,不要一味的停留在那里
既然这里由于限制不能实现你的输出的话,你就应该找替代办法了。可以试试用string来输出你的问题。
-----------------------------------------------------------------我学数构也编过这玩意
自己来实现太繁了。体力劳动!只是希望有现成的东西可以偷工懒一下。呵呵。