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

发布于 2024-08-24 19:45:52 字数 652 浏览 12 评论 0原文

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

There is a similar question on SO which suggests using NumberFormat which is what I have done.

I am using the parse() method of NumberFormat.

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);
}

The result I get is

1.93

I didn't really expect this to work because 1.930000000000E+02 is a pretty unusual looking number, do I have to do some string parsing first to remove the zeros? Or is there a quick and elegant way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜深人未静 2024-08-31 19:45:53

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

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

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

When you use DecimalFormat with an expression in scientific notation, you need to specify a pattern. Try something like

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

See the javadocs for DecimalFormat -- there's a section marked "Scientific Notation".

梦开始←不甜 2024-08-31 19:45:53

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

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

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

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

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

If you take your angle as a double, rather than a String, you could use printf magic.

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

displays the float to 2 decimal places. 193.00 .

If you instead used "%.2e" as the format specifier, you would get "1.93e+02"

(not sure exactly what output you want, but it might be helpful.)

南烟 2024-08-31 19:45:52

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

Memorize the String.format syntax so you can convert your doubles and BigDecimals to strings of whatever precision without e notation:

This java code:

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)));

Prints:

8.88E-8
0.0000001
0.000000089
0.0000000888000000000
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文