java科学计数法转换成double_如何实现将java中Double类型
的科学计数法转换。。。
1.转为指定格式显⽰:
/**
* 将double类型的科学计数法转换成指定格式的正常字符串
* start 转换double类型的格式为:两位⼩数
* @param d
* @return String
* @author ljp
*/
public static String formatToTwo(double d) {
DecimalFormat a = new DecimalFormat("#,##0.00");
String frmStr = a.format(d);
return frmStr;
}
2.对于位数不⼤,不是科学计数法的字符串类型,如果位数不⾜两位的数字,⾃动添0⾄两位:
public static String formatToTwo(String frmStr) {
String[] frmStrArray = null;
if (ains(".")) {
frmStrArray = new String[2];
frmStrArray[0] = frmStr.substring(0, frmStr
.indexOf("."));
frmStrArray[1] = frmStr.substring(frmStr
.indexOf(".") + 1, frmStr.length());
}
if (frmStrArray != null && 1 < frmStrArray.length) {
String firStr = frmStrArray[0];
String secStr = frmStrArray[1];
if (secStr != null && 2 > secStr.length()) {
int secStrLen = secStr.length();
if (secStrLen == 1) {
bigdecimal格式化两位小数secStr = secStr + "0";
}
if (secStrLen == 0) {
secStr = "00";
}
}
frmStr = firStr + "." + secStr;
} else {
frmStr = frmStr + ".00";
}
return frmStr;
}
注:
在java中,把⼀个double或者BigDecimal的⼩数转换为字符串时,经常会⽤科学计数法表⽰,⽽我们⼀般不想使⽤科学计数法,可以通过:
DecimalFormat a = new DecimalFormat("#,##0.00000000");
System.out.println(a.format(11111111.0000001000000001));
的⽅式来格式化输出字符串。
对于BigDecimal的⼩数,如果制定精度<=6, 则可以放⼼的使⽤其toString函数。但是对于>6的精度,有可能会使⽤科学计数法,查看器代码有如下判断:
long adjusted = -(long)scale + (coeff.length-1);
if ((scale >= 0) && (adjusted >= -6)){
⾮科学计数法的toString.
}
其中scale指BigDecimal的精度,
coeff对应使⽤BigInteger存储的值的toString字符串, coeff = intVal.abs().toString().toCharArray(),也就是说BigDecimal在对应精度下的整数值,例如BigDecimal ob = new BigDecimal(0.00000011), ob的精度为7, 则coeff="1";如果ob=new
BigDecimal(0.10000011), 则coeff="1000001";如果ob=new BigDecimal(0.00000001), 则coeff="0";