我想从使用java的excel表中读取值。当我在Excel中的单元格中输入超过10个字母时,它将以“9.78313E + 2”等指数形式显示。但这不是我给出的实际数字。 任何机构都可以帮助我解决这个问题。如何使用java语言将上述指数形式转换为原始数字。将java中的指数值转换为数字格式
在此先感谢
我想从使用java的excel表中读取值。当我在Excel中的单元格中输入超过10个字母时,它将以“9.78313E + 2”等指数形式显示。但这不是我给出的实际数字。 任何机构都可以帮助我解决这个问题。如何使用java语言将上述指数形式转换为原始数字。将java中的指数值转换为数字格式
在此先感谢
Double.parseDouble("9.78313E+2");
给我
978.313
欲了解更多信息请参阅the doc。
按照你进一步询问之下,如果你输入4256411411
和Excel将展示这为4.26E+09
,把该值到parseDouble()
只会给你4260000000
。如果您需要原始文件,或许您需要为Java程序以更全面的格式输出Excel文件,和/或使用Java/Excel API(例如POI)查询它。
是的。它给出但这不是我在Excel表格中给出的原始数字 – user1853173
我也用BigDecimal试过这个。它也给出相同的答案 – user1853173
你能告诉我们确切的数字是什么吗?你是从你的Java代码中的Excel表格中获取数字吗? –
如果您想要,您可以使用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
我得到的excel表的输入是指数形式 – user1853173
@ user1853173。难道你不能获取字符串形式的值,只是将其转换为'BigDecimal'? –
@ user1853173 ..不要将提取的值存储为“double”类型。但在字符串类型。 –
你可以用下面的方法很容易地转换:
Double.valueOf("9.78313E+2").longValue()
或
BigDecimal bd = new BigDecimal("9.78313E+2");
long val = bd.longValue();
假设给定数量是在一个字符串的形式。
以上代码给出的输出为4260000000,但这不是4.26E + 09的原始值。 – user1853173
在您读取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);
你应该务实地做到这一点。在阅读之前,您的程序应该将其更改为数字类型。还有什么是你的Excel读取API? – Suranga
在从excel中读取值之前,我需要将单元格的格式更改为数字? – user1853173
什么是您的Excel读取API? – Suranga
可以按如下方式进行转换, 例如: 新的BigDecimal( “406770000244E + 12”)toBigInteger();
对不起,但没有上述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个十进制数字。
希望这会有所帮助。
在读取单元格值之前,必须将单元格转换为数字格式。下面是用于获取的实际值是在指数格式的代码片段:
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
您还可以使用包装类:
Double bd=new Double(4445566622);
System.out.println(bd.longValue());
输出-4445566622
你应该告诉我们你在Excel中拥有的数量和结果在Java中。 – looper
'9.78313E + 2' ='978.313'您是否将格式与价值混淆? 'double'不保存格式只有值。 –