2010-03-15 511 views
3

SO上有一个类似的问题,它建议使用NumberFormat,这是我所做的。将科学计数法转换成十进制表示法

我正在使用NumberFormat的parse()方法。

public static void main(String[] args) throws ParseException{ 

    DecToTime dtt = new DecToTime(); 
    dtt.decToTime("1.930000000000E+02"); 

} 

public void decToTime(String angle) throws ParseException{ 

    DecimalFormat dform = new DecimalFormat(); 
    //ParsePosition pp = new ParsePosition(13); 
    Number angleAsNumber = dform.parse(angle); 

    System.out.println(angleAsNumber); 
} 

结果我得到的是

1.93

我真的没有想到这个工作,因为1.930000000000E + 02是一个非常不寻常找数,我必须首先做一些字符串解析来删除零?还是有一个快速和优雅的方式?

回答

2

当您在科学记数法中对表达式使用DecimalFormat时,您需要指定一个模式。尝试像

DecimalFormat dform = new DecimalFormat("0.###E0"); 

查看javadocs for DecimalFormat - 有一个标有“Scientific Notation”的部分。

1

如果你把你的角度看作双重的而不是字符串,你可以使用printf魔法。

System.out.printf("%.2f", 1.930000000000E+02);

显示浮子为2位小数。 193.00

如果改为使用"%.2e"作为格式说明,你会得到"1.93e+02"

(不知道正是你想要的输出,但它可能会有所帮助。)

3

背诵String.format语法,这样你就可以转换您的双打和BigDecimals的无论何种精密串无E符号:

这java代码:

double dennis = 0.00000008880000d; 
System.out.println(dennis); 
System.out.println(String.format("%.7f", dennis)); 
System.out.println(String.format("%.9f", new BigDecimal(dennis))); 
System.out.println(String.format("%.19f", new BigDecimal(dennis))); 

打印:

8.88E-8 
0.0000001 
0.000000089 
0.0000000888000000000 
相关问题