2012-11-26 89 views
5

我想从使用java的excel表中读取值。当我在Excel中的单元格中输入超过10个字母时,它将以“9.78313E + 2”等指数形式显示。但这不是我给出的实际数字。 任何机构都可以帮助我解决这个问题。如何使用java语言将上述指数形式转换为原始数字。将java中的指数值转换为数字格式

在此先感谢

+1

你应该告诉我们你在Excel中拥有的数量和结果在Java中。 – looper

+1

'9.78313E + 2' ='978.313'您是否将格式与价值混淆? 'double'不保存格式只有值。 –

回答

9
Double.parseDouble("9.78313E+2"); 

给我

978.313 

欲了解更多信息请参阅the doc

按照你进一步询问之下,如果你输入4256411411和Excel将展示这为4.26E+09,把该值到parseDouble()只会给你4260000000。如果您需要原始文件,或许您需要为Java程序以更全面的格式输出Excel文件,和/或使用Java/Excel API(例如POI)查询它。

+0

是的。它给出但这不是我在Excel表格中给出的原始数字 – user1853173

+0

我也用BigDecimal试过这个。它也给出相同的答案 – user1853173

+0

你能告诉我们确切的数字是什么吗?你是从你的Java代码中的Excel表格中获取数字吗? –

2

如果您想要,您可以使用BigDecimal您在Excel Sheet有确切的价值: -

BigDecimal bd = new BigDecimal("4256411411"); 
System.out.println(bd.doubleValue()); 

// If you are sure that's not a floating point number, then use 
System.out.println(bd.longValue()); 

打印: -

4.256411411E9 
4256411411 
+0

我得到的excel表的输入是指数形式 – user1853173

+0

@ user1853173。难道你不能获取字符串形式的值,只是将其转换为'BigDecimal'? –

+0

@ user1853173 ..不要将提取的值存储为“double”类型。但在字符串类型。 –

0

你可以用下面的方法很容易地转换:

Double.valueOf("9.78313E+2").longValue()

BigDecimal bd = new BigDecimal("9.78313E+2"); 
long val = bd.longValue(); 

假设给定数量是在一个字符串的形式。

+1

以上代码给出的输出为4260000000,但这不是4.26E + 09的原始值。 – user1853173

3

在您读取excel表单中的值之前,请将您的列设置为数字。

This可能会帮助你

修订

HSSFCell cellE1 = row1.getCell((short) 4); 
cellE1.setCellType(HSSFCell.CELL_TYPE_NUMERIC); 
Double e1Val = cellE1.getNumericCellValue(); 
BigDecimal bd = new BigDecimal(e1Val.toString()); 
long lonVal = bd.longValue(); 
System.out.println(lonVal); 
+0

你应该务实地做到这一点。在阅读之前,您的程序应该将其更改为数字类型。还有什么是你的Excel读取API? – Suranga

+0

在从excel中读取值之前,我需要将单元格的格式更改为数字? – user1853173

+0

什么是您的Excel读取API? – Suranga

3

可以按如下方式进行转换, 例如: 新的BigDecimal( “406770000244E + 12”)toBigInteger();

0

对不起,但没有上述Double.parseDouble()Double.valueOf()的答案......解决我的问题,我继续获得指数“E”值...

This链接有问题的一个更好的方法,正如我在那里写的 - 有一个非常好的解决方案:

我需要将一些双重转换为货币值,并从中获得最多的解决方案是好的但不适合我。

DecimalFormat最终被我的样子,所以这里是我做了什么:

public String foo(double value) //Got here 6.743240136E7 or something.. 
    { 
     DecimalFormat formatter; 

     if(value - (int)value > 0.0) 
      formatter = new DecimalFormat("0.00"); //Here you can also deal with rounding if you wish.. 
     else 
      formatter = new DecimalFormat("0"); 

     return formatter.format(value); 
    } 

正如你可以看到,如果数字是很自然的,我得到 - 比如说 - 2000万,而不是2E7(等) - 没有任何小数点。

如果它是小数,我只得到2个十进制数字。

希望这会有所帮助。

0

在读取单元格值之前,必须将单元格转换为数字格式。下面是用于获取的实际值是在指数格式的代码片段:

nextCell.setCellType(XSSFCell.CELL_TYPE_NUMERIC); 
Double doubleValue = nextCell.getNumericCellValue(); 
BigDecimal bd = new BigDecimal(doubleValue.toString()); 
long lonVal = bd.longValue(); 
String phoneNumber = Long.toString(lonVal).trim(); 
System.out.print("PhoneNumber " + phoneNumber); 

Blog已经wirtten展示实际的结果。

问候, ANKUR

0

您还可以使用包装类:

Double bd=new Double(4445566622); 
System.out.println(bd.longValue()); 

输出-4445566622

相关问题