我正在尝试使用java从excel表中读取值。当我在excel的单元格中键入10个以上的字母时,它以指数形式显示,如“9.78313E + 2”。但这不是我给出的真实数字。 任何身体都可以帮助我解决这个问题。如何使用java语言将上述指数形式转换为原始数字。
提前致谢
答案 0 :(得分:11)
Double.parseDouble("9.78313E+2");
给了我
978.313
有关详细信息,请参阅the doc。
按照下面的进一步查询,如果您输入4256411411
并且Excel将其显示为4.26E+09
,则将该值放入parseDouble()
只会给您4260000000
。如果您需要原始文件,可能需要以更全面的格式为Java程序输出Excel文件,和/或使用Java / Excel API(例如POI)进行查询
答案 1 :(得分:5)
您可以转换如下, 例如:
new BigDecimal("406770000244E+12").toBigInteger();
答案 2 :(得分: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);
答案 3 :(得分: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
答案 4 :(得分:2)
很抱歉,但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);
}
正如你所看到的,如果数字是自然的,我得到 - 比如说 - 20000000而不是2E7(等) - 没有任何小数点。
如果是小数,我只得到2位小数。
希望这会有所帮助。
答案 5 :(得分:2)
绝对可以尝试这项工作
double值= 2.06E //实数205809104.13
BigDecimal.valueOf(value)
为我工作
答案 6 :(得分:1)
您可以使用以下方法轻松转换:
Double.valueOf("9.78313E+2").longValue()
或
BigDecimal bd = new BigDecimal("9.78313E+2");
long val = bd.longValue();
假设给定的数字是字符串形式。
答案 7 :(得分: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一直在展示实际结果。
此致 ANKUR
答案 8 :(得分:0)
您也可以使用包装类:
Double bd=new Double(4445566622);
System.out.println(bd.longValue());
输出-4445566622
答案 9 :(得分:0)
当我只需要“ 1744949451 ”的字符串数据时却遇到了同样的问题,但它给出了“ 1.744949451E9 ” 所以这对我有用
XSSFCell cell = cells.getCell(j);
String value = cell.toString();
if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
//cell.setCellType(XSSFCell.CELL_TYPE_STRING);
value = cell.getRawValue();
}
Log.i("LOG", value + " " + cell.getCellType());
答案 10 :(得分:0)
这个答案对我有用:
Double bd = new Double(4445566622);
System.out.println(bd.longValue());
// Outputs -4445566622
答案 11 :(得分:0)
`Double value = double value ;
Long longValue = value.longValue(); String strCellValue1 = new String(longValue.toString().format("%f",value).replaceAll("\\,?0*$", ""));`
声明一个double值并转换为long 转换为字符串并格式化为浮动双精度值最终将所有值替换为 123456789,0000 到 123456789
答案 12 :(得分:-1)
尝试以下模式:
Double dblValue = Double.parseDouble("1.99E+07");
String str = String.format("%.2f", dblValue);
System.out.println(str);
输出:
run:
19900000,00
BUILD SUCCESSFUL (total time: 0 seconds)