当double的数比较大时,它用科学计数法了,,,请帮忙

解决方案 »

  1.   

    都说double不是很精确的,如果要精确运算,用bigdecimal
    参看http://blog.csdn.net/tavor/archive/2008/02/25/2118553.aspx
      

  2.   

    for(int i=0;i<n;i++) {
          x = x*10;
    }
    int result = x %10;
      

  3.   

    double 的精度有限,如果lz需要很高精度,用BigDecimal代替double。
      

  4.   

    同意
    LZ查阅一下BigDecimal的用法吧
      

  5.   

    把double 变成 BigDecimal,就能知道第n位,是几了吗
      

  6.   

    大伙的意思,不要用double这种数据类型,用bigdecimal
      

  7.   

    double不能精确表示,所以你用的时候有时候是得不到准确的小数部分,举个例子,如下 double dd  = 2222222333.99999911199399d;
    double dd2 = 2222222333.99999922299399d;
    System.out.println(dd==dd2);输出结果
    true所以是不能够用double类型来精确表示,推荐用bigdecimal。
      

  8.   

    有人这么说过答:楼主的问题很好啊。 
      对超过double值范围的或者说:高精度(或任意精度)的表达式求值问题,请楼主使用著名的JEP包吧(JAVA表达式求值包,功能很强大!) 
    如:楼主的例子(引申一下,变得更复杂些): 
    234535098234095890234589038.9999999998888888888888888888888888888888*(923948723894723947230598.7777777777777777+12.00999999999999999999999999999999999999999999999999) 
    值为: 
    2.166984047219166216979260416663208E+50(精度我设定的是:MathContext.DECIMAL128) 使用的参考代码:(总共三步) 
    Jep jep = new Jep(new BigDecComponents(MathContext.DECIMAL128));//生成指定计算精度的jep对象
    Object rs=jep.evaluate(
            jep.parse("234535098234095890234589038.9999999998888888888888888888888888888888*(923948723894723947230598.7777777777777777+12.00999999999999999999999999999999999999999999999999)"
                  ));//对指定的任意表达式进行求值
    System.out.println(rs);//打印表达式的值