将java中的指数值转换为数字格式

时间:2012-11-26 11:18:28

标签: java

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

提前致谢

13 个答案:

答案 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)