将科学计数法转换为十进制计数法。

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看起来是一个非常不寻常的数字,我需要先进行一些字符串解析以去除零吗?还是有一种快速而优雅的方法呢?

3个回答

3

记住 String.format 语法,这样您可以将双精度浮点数和 BigDecimal 转换成任何精度的字符串而不使用 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

2

当您使用DecimalFormat处理科学计数法表达式时,需要指定一个格式。尝试使用以下格式:

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

请参阅DecimalFormat的javadocs -- 有一个标记为“科学计数法”的部分。


1

如果你将角度作为一个双精度数,而不是一个字符串,你可以使用printf魔法。

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

显示浮点数到小数点后两位。 193.00

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

(不确定你想要的确切输出是什么,但这可能会有帮助。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接