需要考虑哪些问题?
codeing
public static double StringToDouble(String str) {
boolean zeroFlag = true;
boolean eZeroFlag = true;
int posBeforePoint = 0;
int posBeforeE = 0;
double posPoint = 1.0;
double beforePoint=0.0,afterPoint=0.0,afterE = 0.0;
int length = str.length();
char[] tempStr;
if (str == null || length == 0) {
System.out.println("参数不合法");
return 0.0;
}
if (str.startsWith("+") || str.startsWith("-")) {
tempStr = str.substring(1).toCharArray();
length--;
if (str.startsWith("-")) {
zeroFlag = false;
}
}else{
tempStr = str.toCharArray();
}
for (int i = 0; i < tempStr.length; i++) {
if (tempStr[i] >= '0' && tempStr[i] <= '9') {
if (posBeforeE == 0) {
if (posBeforePoint == 0) {
beforePoint = beforePoint * 10 + (tempStr[i]-48);
}else{
posPoint = posPoint * 0.1;
afterPoint = afterPoint + (tempStr[i]-48) * posPoint;
}
}else{
afterE = afterE * 10 + (tempStr[i]-48);
}
} else if (tempStr[i] == '.') {
posBeforePoint++;
if (posBeforePoint > 1) {
System.out.println("参数不合法");
return 0.0;
}
}else if(tempStr[i] == 'E' || tempStr[i] == 'e'){
posBeforeE++;
if (posBeforeE > 1) {
System.out.println("参数不合法");
return 0.0;
}
} else if (tempStr[i] == '+' || tempStr[i] == '-') {
if (tempStr[i] == '-') {
eZeroFlag = false;
}
}else{
System.out.println("参数不合法");
return 0.0;
}
}
if (!eZeroFlag) {
afterE = afterE * (-1.0);
}
if (zeroFlag) {
return (beforePoint + afterPoint) * Math.pow(10, afterE);
}else{
return (beforePoint + afterPoint) * Math.pow(10, afterE)*(-1.0);
}
}
运行结果
public static void main(String[] args) {
double res = StringToDouble("3.4211e-2");
System.out.println(res);
}
输出:
0.034211