将java中的指数值转换为数字格式
我正在尝试使用java从excel表中读取值。当我在excel中的一个单元格中键入超过10个字母时,它会以指数形式显示,如“9.78313E+2”。但这不是我给出的真实数字。 有人能帮我吗。如何使用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(
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万到123456789yes。它给出了,但这不是我在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)之前,请将单元格类型设置为如下所示的数值;这似乎没有添加任何尚未在中更好解释的内容。