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

4

3 回答 3

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
于 2014-01-05T19:31:40.820 回答
2

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

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

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

于 2010-03-15T16:16:28.237 回答
1

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

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

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

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

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

于 2010-03-15T16:24:36.383 回答