存在小数位:
Double value = 34313464.94d;//3.431346494E7
BigDecimal result = new BigDecimal(String.valueOf(value));
System.out.println("科学计数法转换后:"+result);
不存在小数位:
Double value = 33679200d;//3.36792E7
BigDecimal result = new BigDecimal(value);
System.out.println("科学计数法转换后:"+result);
示例:
Object value=cell.getNumericCellValue();
//value,Double,3.36792E7,3.431346494E7
//浮点数(double、float)当整数部分超过7位以上(不含7位),就会自动转为科学计数法显示。
if((Double)value >= 10000000){
System.out.println("科学计数法转换前:"+value);
BigDecimal result = new BigDecimal((Double)value);//没有小数位可以这样转
if(value.toString().length() <= 11){
System.out.println("不存在小数位时,不能先把Double转string,不然会出现:3.36792E7会变成3.36792E+7,"
+ "new BigDecimal(String.valueOf(value)):"+new BigDecimal(String.valueOf(value))
+",new BigDecimal((Double)value):"+new BigDecimal((Double)value));
}
if(value.toString().length() > 11){//包含小数时精度会丢失,需要先转string,如果直接转,3.431346494E7会变成34313464.939999997615814208984375
result = new BigDecimal(String.valueOf(value));
}
System.out.println("科学计数法转换后:"+result);
value = result;
}