在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是一个非常不寻常的数字,我是否必须首先进行一些字符串解析才能删除零?或者有一种快速而优雅的方式吗?
答案 0 :(得分:3)
记住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
答案 1 :(得分:2)
将DecimalFormat与科学计数法中的表达式一起使用时,需要指定模式。尝试像
这样的东西DecimalFormat dform = new DecimalFormat("0.###E0");
参见javadocs for DecimalFormat - 标有“科学记谱法”的部分。
答案 2 :(得分:1)
如果你将角度视为双精度而不是角色,你可以使用printf魔法。
System.out.printf("%.2f", 1.930000000000E+02);
将浮点数显示为2位小数。 193.00
。
如果您改为使用"%.2e"
作为格式说明符,则会获得"1.93e+02"
(不确定你想要什么输出,但它可能会有所帮助。)