将科学记数法转换为十进制记数法

时间:2010-03-15 16:05:48

标签: java numbers scientific-notation

在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是一个非常不寻常的数字,我是否必须首先进行一些字符串解析才能删除零?或者有一种快速而优雅的方式吗?

3 个答案:

答案 0 :(得分:3)

记住String.format语法,这样您就可以将双精度数和BigDecimals转换为任意精度的字符串,而不需要注释:

这个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

答案 1 :(得分:2)

将DecimalFormat与科学计数法中的表达式一起使用时,需要指定模式。尝试像

这样的东西
DecimalFormat dform = new DecimalFormat("0.###E0");

参见javadocs for DecimalFormat - 标有“科学记谱法”的部分。

答案 2 :(得分:1)

如果你将角度视为双精度而不是角色,你可以使用printf魔法。

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

将浮点数显示为2位小数。 193.00

如果您改为使用"%.2e"作为格式说明符,则会获得"1.93e+02"

(不确定你想要什么输出,但它可能会有所帮助。)