将科学计数法转换为十进制计数法
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 是一个看起来很不寻常的数字,我是否必须先进行一些字符串解析以删除零?或者有一种快速而优雅的方法吗?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当您将 DecimalFormat 与科学记数法表达式一起使用时,您需要指定一个模式。尝试类似的内容
请参阅 DecimalFormat 的 javadocs -- 有一个部分标记为“科学记数法”。
When you use DecimalFormat with an expression in scientific notation, you need to specify a pattern. Try something like
See the javadocs for DecimalFormat -- there's a section marked "Scientific Notation".
如果您将角度视为双精度型而不是字符串,则可以使用 printf 魔法。
System.out.printf("%.2f", 1.930000000000E+02);
显示浮点数到小数点后两位。
193.00
。如果您使用
"%.2e"
作为格式说明符,您将得到"1.93e+02"
(不确定您想要什么输出,但它可能是有帮助。)
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.)
记住
String.format
语法,这样你就可以将双精度数和BigDecimals转换为任意精度的字符串,而无需使用符号:此java代码:
打印:
Memorize the
String.format
syntax so you can convert your doubles and BigDecimals to strings of whatever precision without e notation:This java code:
Prints: