Convert scientific notation to decimal notation

匿名 (未验证) 提交于 2019-12-03 02:31:01

问题:

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?

回答1:

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".



回答2:

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 


回答3:

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!