将科学记数法转换为十进制记数法
Posted
技术标签:
【中文标题】将科学记数法转换为十进制记数法【英文标题】:Convert scientific notation to decimal notation 【发布时间】:2010-03-15 16:05:48 【问题描述】:关于 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 是一个看起来很不寻常的数字,我是否必须先进行一些字符串解析才能删除零?或者有没有快速优雅的方法?
【问题讨论】:
【参考方案1】:记住 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
【讨论】:
【参考方案2】:当您将 DecimalFormat 与科学计数法表达式一起使用时,您需要指定一个模式。尝试类似
DecimalFormat dform = new DecimalFormat("0.###E0");
参见javadocs for DecimalFormat——有一个部分标有“科学记数法”。
【讨论】:
【参考方案3】:如果您将角度作为双精度而不是字符串,则可以使用 printf 魔术。
System.out.printf("%.2f", 1.930000000000E+02);
将浮点数显示到小数点后 2 位。 193.00
.
如果您改为使用"%.2e"
作为格式说明符,您将得到"1.93e+02"
(不确定您想要什么输出,但它可能会有所帮助。)
【讨论】:
以上是关于将科学记数法转换为十进制记数法的主要内容,如果未能解决你的问题,请参考以下文章