Java 四舍五入或科学记数法

Java 四舍五入或科学记数法,java,Java,如果我的数字超过8个字符,我想对其进行四舍五入 比如说, // Big number rounding using scientific notation double myDouble1 = 123456789;// desired output: 1.23e+08 另一种情况 // Rounding double myDouble2 = 12345.5678901234; // Desired output: 12345.57 我已尝试将String.format()与%.2g和%.7一

如果我的数字超过8个字符,我想对其进行四舍五入

比如说,

// Big number rounding using scientific notation
double myDouble1 = 123456789;// desired output: 1.23e+08
另一种情况

// Rounding
double myDouble2 = 12345.5678901234; // Desired output: 12345.57
我已尝试将
String.format()
%.2g
%.7
一起使用,但无法获得所需的输出

这是我试图想出的代码

 public String parseResult(String val){
    String formatted = val;
    try{
        if(formatted.length() > 8){
            double temp = Double.parseDouble(val);
            if(temp % 1 == 0){
                formatted = String.format("%.2g", temp);
            }else{
                formatted = String.format("%.7g", temp);
            }
        }
    }
    catch(NumberFormatException e)
    {
    }
    return formatted;
}
公共类SolutionMain
{
公共静态void main(字符串[]args)
{
double myDouble1=123456789;//所需输出:1.23e+08
double myDouble2=12345.5678901234;//所需输出:12345.57
System.out.println(parseResult(myDouble1));
System.out.println(parseResult(myDouble2));
}
公共静态字符串解析结果(Double myDouble)
{
十进制格式=空;
如果(myDouble.toString().length()>8)
{
如果(myDouble%1==0)
格式=新的十进制格式(“0.00E00”);
其他的
格式=新的十进制格式(“0.00”);
}
返回格式。格式(myDouble);
}
}

有关更多模式格式详细信息:

您可以使用DecimalFormatSymbols类创建自己的格式规则。我建议您看一下的“更改格式符号”部分
class ScientificNot
{

      public static String getScientifiNotation(double n)
    { 
          int n1=(int)n;
          String s0=String.valueOf(n-(double)n1);
          String s1=String.valueOf((double)((int)n));
          int in=s1.indexOf(".");     
          String mantissa=null,exp=null;
          if(n>=10000000.0)
          {

             if(s1.length()>8)
             {
                  mantissa=s1.substring(0,3);
                  exp=s1.substring(3);
                  double man=Double.parseDouble(mantissa)/100.0;
                  return(man+"e"+exp.length());

                 }
             else
             return s1;
           }
          else if(s0.length()>8)
             {
               double num=(((double)((int)(n*1000)))); 
               int dp=((int)num%1000);
               if(dp%10>=5)
                      dp=(dp-(dp%10))+10;
               return String.valueOf(((int)num/1000)+"."+(dp/10));
               }
              else{
                 s1=""+n;

              }   
          return s1;
        }
    }