写了一段代码 是把0到1之间的8进制数转化为十进制数的
import java.util.*;
public class Test3 {
 public Test3(){
  Scanner in = new Scanner(System.in);
  double  m = in.nextDouble();
  String s = String.valueOf(m);
  double e = (double)1/8;
          double total =0.00;
          for(int i = 2;i<s.length();i++){
           total += (s.charAt(i)-48)*e;
           e *= e;
          }
  System.out.println(total);
  }
    public static void main(String[] args){
     new Test3();
    }
}
执行的时候发现有时会出错
比如0.001
0.01234567
不知道如何改进
请各位给点意见
谢谢
~~

解决方案 »

  1.   

    e *= e;
    e *= (double)1/8;
      

  2.   

    import java.util.*;public class Test3 { public Test3() {
    Scanner in = new Scanner(System.in);
    double m = in.nextDouble();

    double total = 0.00;
    if (m > 0 & m < 1) {
    String s = String.valueOf(m);
    double e = (double) 1 / 8;

    for (int i = 2; i < s.length(); i++) {
    total += (s.charAt(i) - 48) * e;
    e *= (double)1/8;
    }
    }
    System.out.println(total);
    } public static void main(String[] args) {
    new Test3();
    }
    }
      

  3.   

    package mars.test;import java.util.*;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class ConvertOctalToDecimal { public static final String EMode="^(\\d)\\.(\\d)E-(\\d+)$";


    public ConvertOctalToDecimal() {

    Scanner in = new Scanner(System.in);
    double m = in.nextDouble(); double e = 0.125d;
    double total = 0.00d;
    if (m > 0 & m < 1) {
    //0.001=1.0E-4
    String s = String.valueOf(m);

    if(Pattern.matches(EMode,s))
    {
    Matcher matcher = Pattern.compile(EMode).matcher(s);
    String one=null;
    String two=null;
    String three=null;

    while(matcher.find())
    {
    one = matcher.group(1);
    two = matcher.group(2);
    three = matcher.group(3);
    }
    //
    total=Integer.parseInt(one)*1d;

    for(int i=0;i<two.length();i++)
    {
    total +=(s.charAt(i) - 48)*e;
    e*=0.125d;
    }
    total*=Math.pow(8d,-Integer.parseInt(three));
    }
    else
    {
    for (int i = 2; i < s.length(); i++) {
       total += (s.charAt(i) - 48)*e;
    e *= 0.125d;
    }
    }
    }
    System.out.println(total);
    } public static void main(String[] args) {
     new ConvertOctalToDecimal();
     
    }
    }
      

  4.   

     //0.0001=1.0E-4
     String s = String.valueOf(m);出问题就在这里,主要是当为0.0001的时候,s为1.0E-4了,所以这里分两种情况来做这件事情