我正在尝试使用 java 从 excel 表中读取值。当我在 Excel 中的单元格中键入超过 10 个字母时,它会以指数形式显示,例如“9.78313E+2”。但这不是我给出的真实数字。任何机构都可以帮助我解决这个问题。如何使用 java 语言将上述指数形式转换为原始数字。
提前致谢
我正在尝试使用 java 从 excel 表中读取值。当我在 Excel 中的单元格中键入超过 10 个字母时,它会以指数形式显示,例如“9.78313E+2”。但这不是我给出的真实数字。任何机构都可以帮助我解决这个问题。如何使用 java 语言将上述指数形式转换为原始数字。
提前致谢
您可以按如下方式进行转换,例如:
new BigDecimal("406770000244E+12").toBigInteger();
Double.parseDouble("9.78313E+2");
给我
978.313
有关更多信息,请参阅文档。
根据您在下面的进一步查询,如果您已输入4256411411
并且 Excel 将其显示为4.26E+09
,则将该值放入parseDouble()
只会给您4260000000
. 如果您想要原始文件,也许您需要为您的 Java 程序以更完整的格式输出 Excel 文件,和/或使用 Java/Excel API(例如 POI)查询它
对不起,但以上答案都没有Double.parseDouble()
......Double.valueOf()
解决了我的问题,我继续得到指数“E”值......
这个链接有一个更好的方法来解决这个问题,正如我在那里写的 - 有一个非常好的解决方案:
我需要将一些 double 转换为货币值,并且发现大多数解决方案都可以,但不适合我。
最终是我的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 个十进制数字。
希望这会有所帮助。
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 表中读取值之前,将您的列格式化为数字。
这可能对你有帮助
更新
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);
试试这个绝对可以工作
double value = 2.06E //real 205809104.13
BigDecimal.valueOf(value)
为我工作
您可以使用以下方法轻松转换:
Double.valueOf("9.78313E+2").longValue()
或者
BigDecimal bd = new BigDecimal("9.78313E+2");
long val = bd.longValue();
假设给定的数字是字符串形式。
`Double value = double value ;
Long longValue = value.longValue(); String strCellValue1 = new String(longValue.toString().format("%f",value).replaceAll("\\,?0*$", ""));`
声明一个 double 值并转换为 long 转换为字符串并格式化为 float 值最后将所有值替换为 123456789,0000 到 123456789
您还可以使用包装类:
Double bd=new Double(4445566622);
System.out.println(bd.longValue());
输出-4445566622
这个答案对我有用:
Double bd = new Double(4445566622);
System.out.println(bd.longValue());
// Outputs -4445566622
当我只需要“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());
尝试以下模式:
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)
在读取单元格值之前必须将单元格转换为数字格式。下面是用于获取指数格式的实际值的代码片段:
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);
已写博客以展示实际结果。
问候, 安库尔