可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.)