-1

文字列を double に変換するプログラムを作成する必要があります。

public class Convert{
  public static void main(String args[]){
    String num="124023211.123";
    int d=0,g=0,c=0,fnl=0,h=0,v=0;
    double fnl2=0;
    int exp=(num.indexOf(".")-1);
    while(num.charAt(d)!='.'){
        g=num.charAt(d)-48;
        int k = 1;
        for(int f=0;f<exp;f++){
            k=(k*10);
        }
        fnl+=(k*g);
        d++;
        exp--;
    }
    num=(num.substring(d+1) );
    //System.out.println(fnl);
    //System.out.println(num);

    while(h!=num.length()){
      v=num.charAt(h)-48;
      double j=1;
      int exp1=num.length();
      for(int f1=0;f1<exp1;f1++){
        j*=.10;
      }
      fnl2+=(h*j);
      j++;
      h++;
    }
    System.out.println(fnl2);
  }
}

最初の while ループは文字列の int 部分を変換し、正しく機能します。ただし、2 番目の while ループは、文字列の 10 進数部分になるはずです。double の結果が巨大な 10 進数になり、変換が台無しになり、2 番目の while ループで間違った答えが出力されるため、苦労しています。

4

3 に答える 3

1
int exp1=num.length();

この行は問題の一部です。あなたのループは常に num.length() 回ループしますが、 num の長さは変わりません (あなたの場合は常に 3 です)。これにより、3 つの数値すべてが 1000 分の 1 として扱われます。

また、IEEE-754 形式では 10 進数値を正確に表現できないことに注意してください。これらすべての乗算と加算を行うことで、結果に誤差が生じます。Double.Parse は、数値に対して可能な限り最良の概算を提供します。

于 2013-09-13T23:20:00.117 に答える
0

これを試してみてください。有効なデータがテストされて正常に動作しています

public class Sample1 {
    public static void main(String args[]){
        String num="122312312.2331231";
        String s1 = num.substring(0,num.indexOf("."));
        String s2 = num.substring(num.indexOf(".") + 1,num.length());
        System.out.println(s1);
        System.out.println(s2);
        double n1 = 0;
        double n2 = 0;
        for(int i=0;i<s1.length();i++){
            double d = s1.charAt(i) - '0';
            n1 = n1*10;
            n1 += d;
        }
        System.out.println(n1);
        for(int i=0;i<s2.length();i++){
            double d = s2.charAt(i) - '0';
            //n2 = n2/;
            n2 += d/number(i+1);
        }
        System.out.println(n1+n2);
    }
    public static long number(int n2){
        long d = 10l;
        if(n2>1)
        d =  10 * number(n2-1);
        return d;
    }
}

ゴータムソナー

于 2015-02-15T19:10:44.717 に答える