将java中的指数值转换为数字格式
我试图使用java从excel表中读取值。 当我在excel中的单元格中键入超过10个字母时,它以指数forms显示,如“9.78313E + 2”。 但这不是我给出的真实数字。 任何身体都可以帮助我解决这个问题。 如何使用java语言将上述指数forms转换为原始数字。
提前致谢
Double.parseDouble("9.78313E+2");
给我
978.313
有关详细信息,请参阅文档 。
按照下面的进一步查询,如果您输入了4256411411
并且Excel将其显示为4.26E+09
,则将该值放入parseDouble()
将只给您4260000000
。 如果您需要原始文件,可能需要以更全面的格式输出Excel文件以用于Java程序,和/或使用Java / Excel API(例如POI)进行查询
您可以转换如下,例如: new BigDecimal(“406770000244E + 12”)。toBigInteger() ;
在从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);
如果您想要Excel Sheet
的确切值,可以使用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.parseDouble()
和Double.valueOf()
上面的答案都没有解决我的问题,我继续得到指数’E’值……
这个链接有一个更好的解决问题的方法,正如我在那里写的那样 – 有一个非常好的解决方案:
我需要将一些双倍转换为货币值,并且大多数情况下解决方案都可以,但不适合我。
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位小数。
希望这会有所帮助。
您可以使用以下方法轻松转换:
Double.valueOf("9.78313E+2").longValue()
或
BigDecimal bd = new BigDecimal("9.78313E+2"); long val = bd.longValue();
假设给定的数字是Stringforms。
在读取单元格值之前,必须将单元格转换为数字格式。 下面是用于获取指数格式的实际值的代码片段:
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);
博客一直在展示实际结果。
此致,Ankur
您还可以使用包装类:
Double bd=new Double(4445566622); System.out.println(bd.longValue());
输出-4445566622