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

Posted

技术标签:

【中文标题】将科学记数法转换为十进制记数法【英文标题】:Convert scientific notation to decimal notation 【发布时间】:2010-03-15 16:05:48 【问题描述】:

关于 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 是一个看起来很不寻常的数字,我是否必须先进行一些字符串解析才能删除零?或者有没有快速优雅的方法?

【问题讨论】:

【参考方案1】:

记住 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

【讨论】:

【参考方案2】:

当您将 DecimalFormat 与科学计数法表达式一起使用时,您需要指定一个模式。尝试类似

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

参见javadocs for DecimalFormat——有一个部分标有“科学记数法”。

【讨论】:

【参考方案3】:

如果您将角度作为双精度而不是字符串,则可以使用 printf 魔术。

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

将浮点数显示到小数点后 2 位。 193.00.

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

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

【讨论】:

以上是关于将科学记数法转换为十进制记数法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中转换科学记数法和十进制记数法?

将科学记数法格式的字符串字符转换为标准记数法

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

王道计算机组成原理笔记9 进位记数法 进制转换 BCD码 字符

将不同的数字转换为小数 C#(科学记数法到十进制)

从科学记数法到十进制记数法的数值