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

将java中的指数值转换为数字格式,java,Java,我正在尝试使用java从excel表中读取值。当我在excel中的一个单元格中键入超过10个字母时,它会以指数形式显示,如“9.78313E+2”。但这不是我给出的真实数字。 有人能帮我吗。如何使用java语言将上述指数形式转换为原始数字 提前谢谢 Double.parseDouble("9.78313E+2"); 给我 978.313 有关更多信息,请参阅 在下面的进一步查询之后,如果您输入了4256411411,并且Excel将其显示为4.26E+09,将该值放入parseDouble(

我正在尝试使用java从excel表中读取值。当我在excel中的一个单元格中键入超过10个字母时,它会以指数形式显示,如“9.78313E+2”。但这不是我给出的真实数字。 有人能帮我吗。如何使用java语言将上述指数形式转换为原始数字

提前谢谢

Double.parseDouble("9.78313E+2");
给我

978.313
有关更多信息,请参阅


在下面的进一步查询之后,如果您输入了
4256411411
,并且Excel将其显示为
4.26E+09
,将该值放入
parseDouble()
将只为您提供
4260000000
。如果您想要原始文件,可能需要以更完整的格式为Java程序输出Excel文件,和/或使用Java/Excel API(例如POI)查询它。

如果您想要在
Excel工作表中获得的确切值,可以使用
BigDecimal
:-

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

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

Double.valueOf(“9.78313E+2”).longValue()

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

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

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

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

new BigDecimal("406770000244E+12").toBigInteger();

很抱歉,上面的答案都不是Double.parseDouble()
Double.valueOf()
。。。解决了我的问题,我继续得到指数“E”值

link有一个更好的解决问题的方法,正如我在那里所写的,有一个非常好的解决方案:

我需要将一些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(等)——没有任何小数点

如果它是十进制的,我只得到两个十进制数字


希望这会有所帮助。

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

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);
已通过wirtten来展示实际结果

问候,,
Ankur

您还可以使用包装器类:

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

输出
-4445566622

当我只需要字符串数据“17449451”时,我遇到了相同的问题,但它给出了“1.7449451E9” 所以这对我有效

          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 bd = new Double(4445566622);
System.out.println(bd.longValue());
// Outputs -4445566622

尝试以下模式:

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)

试试这个肯定会有用的
双值=2.06E//real 20589104.13
BigDecimal.valueOf(value)
为我工作

`Double value = double value ;
    Long longValue = value.longValue();  String strCellValue1 = new String(longValue.toString().format("%f",value).replaceAll("\\,?0*$", ""));`
声明一个double值并转换为long

转换为字符串并格式化为浮动双精度值最终替换所有值,如123456789万到123456789

yes。它给出了,但这不是我在excel表格中给出的原始数字。我也用BigDecimal尝试了这个数字。它也给出了同样的答案。你能告诉我们确切的数字是多少吗?您是否在Java代码中从excel工作表中获取数字?这是我在excel工作表“4256411411”的单元格中给出的值,但显示为“4.26E+09”。通过使用java,我需要将该指数值转换为原始值。是的,我正在使用java代码从excel表中获取值。您应该向我们显示excel中的数字以及java中的结果。
9.78313E+2
=
978.313
是否将值与格式混淆
double
不保留格式,只保留值。我从excel工作表中得到的输入是指数形式的form@user1853173. 您不能获取字符串形式的值并将其转换为
BigDecimal
?@user1853173。。不要将获取的值存储在
double
类型中。但在字符串类型中。是的,我可以将其转换为BigDecimal,但它没有给出原始值。请查找下面的代码。BigDecimal bd=新的BigDecimal(“4.26E+09”);long val=bd.longValue()@用户1853173。。问题是您已经没有确切的值,所以BigDecimal无法给出该值。它只给出您传递给它的值。上面的代码给出的输出为4260000000。但这不是4.26E+09的原始值。您应该务实地执行此操作。在阅读之前,程序应该将其更改为数字类型。另外,您的excel读取API是什么?在java中,在从excel读取值之前,我需要将单元格的格式更改为数字??如果您使用Apache POI,您可以这样做,但我不知道CSVReader。我不知道Apache POI。这是用于读取excel的API吗?在读取值myCell.setCellType(cell.cell\u type\u NUMERIC)之前,请将单元格类型设置为如下所示的数值;这似乎没有添加任何尚未在中更好解释的内容。