Java以指数表示法解析数字

Posted

技术标签:

【中文标题】Java以指数表示法解析数字【英文标题】:Java parse a number in exponential notation 【发布时间】:2010-04-27 14:38:51 【问题描述】:

我正在尝试将字符串转换为整数,我得到了NumberFormatException。原因很明显。但我需要一个解决方法。以下是示例代码。

public class NumberFormatTest 
 public static void main(String[] args) 
  String num = "9.18E+09";
  try
   long val = Long.valueOf(num);
  catch(NumberFormatException ne)
   //Try to convert the value to 9180000000 here
  
 

我需要评论部分的逻辑,一个通用的会很好。谢谢。

【问题讨论】:

@CPerkins:我不认为这是重复的,因为这个问题似乎只是关于数字问题,而链接的问题是关于符号的每个部分。 【参考方案1】:

使用Double.valueOf() 并将结果转换为long

Double.valueOf("9.18E+09").longValue()

【讨论】:

很好的解决方案.. 谢谢。现在不能接受答案,必须再等7分钟。 :) 旧帖子,但如果您想强制执行精确的长范围(不截断)并避免舍入错误,请使用new BigDecimal(numberString).longValueExact()【参考方案2】:
BigDecimal bd = new BigDecimal("9.18E+09");
long val = bd.longValue();

但这会增加开销,而较小的数字则不需要。对于long 中可表示的数字,请使用 Joachim Sauer 的解决方案。

【讨论】:

这看起来很干净。谢谢!

以上是关于Java以指数表示法解析数字的主要内容,如果未能解决你的问题,请参考以下文章

解析燃烧性能测试之氧指数,含各种塑料的氧指数值

使用预定义指数以指数表示法输出数字

以指数形式表示数字

第九十四章 SQL函数 %MINUS

java数据类型,取值范围,引用类型解析

数据结构与算法之深入解析“H指数”的求解思路与算法示例