16

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

提前致谢

4

13 回答 13

18

您可以按如下方式进行转换,例如:

new BigDecimal("406770000244E+12").toBigInteger();
于 2014-08-07T11:43:21.317 回答
12
Double.parseDouble("9.78313E+2");

给我

978.313

有关更多信息,请参阅文档

根据您在下面的进一步查询,如果您已输入4256411411并且 Excel 将其显示为4.26E+09,则将该值放入parseDouble()只会给您4260000000. 如果您想要原始文件,也许您需要为您的 Java 程序以更完整的格式输出 Excel 文件,和/或使用 Java/Excel API(例如 POI)查询它

于 2012-11-26T11:20:45.877 回答
5

对不起,但以上答案都没有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 个十进制数字。

希望这会有所帮助。

于 2016-12-22T14:48:52.660 回答
4

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
于 2012-11-26T11:21:49.090 回答
3

在您从 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);
于 2012-11-26T11:34:27.317 回答
3

试试这个绝对可以工作
double value = 2.06E //real 205809104.13
BigDecimal.valueOf(value)
为我工作

于 2020-04-22T13:02:14.677 回答
2

您可以使用以下方法轻松转换:

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

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

假设给定的数字是字符串形式。

于 2012-11-26T11:24:35.263 回答
0
`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

于 2021-02-23T13:37:13.813 回答
0

您还可以使用包装类:

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

输出-4445566622

于 2018-01-21T10:42:53.597 回答
0

这个答案对我有用:

Double bd = new Double(4445566622);
System.out.println(bd.longValue());
// Outputs -4445566622
于 2020-01-27T17:03:36.850 回答
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());
于 2019-10-18T01:32:14.997 回答
-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)
于 2020-02-07T13:42:10.590 回答
-1

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

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);

已写博客以展示实际结果。

问候, 安库尔

于 2017-10-24T15:54:04.570 回答