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

【问题讨论】:

    标签: java numbers scientific-notation


    【解决方案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"

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-30
          • 1970-01-01
          • 2012-10-15
          • 2018-11-27
          • 2012-11-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多