将科学计数法转换成十进制表示法
问题描述:
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是一个非常不寻常找数,我必须首先做一些字符串解析来删除零?还是有一个快速和优雅的方式?
答
当您在科学记数法中对表达式使用DecimalFormat时,您需要指定一个模式。尝试像
DecimalFormat dform = new DecimalFormat("0.###E0");
查看javadocs for DecimalFormat - 有一个标有“Scientific Notation”的部分。
答
如果你把你的角度看作双重的而不是字符串,你可以使用printf魔法。
System.out.printf("%.2f", 1.930000000000E+02);
显示浮子为2位小数。 193.00
。
如果改为使用"%.2e"
作为格式说明,你会得到"1.93e+02"
(不知道正是你想要的输出,但它可能会有所帮助。)
答
背诵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