0

double 値に -1 を掛けて負の値を取得しようとしています。それは私にプラスの価値を与え続けます

編集:すべてのコードを掲載しています。

パブリック クラス DecToTime {

public static void main(String[] args) throws IOException {

    DecToTime dtt = new DecToTime();    
    double val = dtt.getNumber("13.930000000000E+02");
    System.out.println(val);

  }

public double getNumber(String number) throws IOException{

    StringReader reader = new StringReader(number);
    int c;
    String mantissa="";
    String sign="";
    String exponent="";
    boolean isMantissa=true;

    while((c = reader.read()) != -1) {
        char character = (char) c;
      if(character=='E'){
          isMantissa=false;  
      }
      if(isMantissa==true){
          mantissa=mantissa+character;
      }

      if(isMantissa==false){
          if((character=='+')|| (character=='-')){
              if(character=='+') {
                  sign = "plus";
              }
              if(character=='-') {
                  sign = "minus";
              }
          }
          if(!(sign.equals(""))){
              exponent=exponent+character;
          }
      }

    }
    System.out.println(mantissa+" - "+sign+" - "+exponent);
    double man = Double.parseDouble(mantissa);
    double exp;
    if(sign.equals("plus")){
        exp = Double.parseDouble(exponent);
    }
    else {
        exp = Double.parseDouble(exponent);
System.out.println("Exp: "+exponent);
    }   
    System.out.println(man+" - "+sign+" - "+exp);
    double value = man*Math.pow(10, exp);
    return value;
}

}

印刷結果は

13.93 - マイナス - 2.0

これは正しいですが、2.0 は -2.0 でなければなりません

4

7 に答える 7

2

elseブランチでは、解析された値がすでに負になっていると思われるexpため、それを否定すると正の値が表示されます。否定のにその値を出力してみてください。

の元の値を表示/印刷していただければ、確かに私たち (およびあなた) に役立ちますexponent

于 2010-03-18T08:36:23.873 に答える
2

符号文字列で乗算の決定を行っています。そのため、より多くのコードを含めると役立ちます。サインがどのように設定されているかを示す

于 2010-03-18T08:37:16.073 に答える
1

私はあなたの問題を理解できません。コードと出力の両方が私には問題ないように見えます。

プログラムの動作が正しいかどうかをよりよく理解するために、乗算の前にデバッグ ステートメント ("System.out.println(exp)") を追加します。

于 2010-03-18T08:38:55.150 に答える
1

メソッドをラップし、アサーションを使用して単体テストを追加します - 成功するか失敗するか?

また、DRY-とにかく両方のブランチで行うため、ifステートメントの前に指数を解析することもできます。

于 2010-03-18T08:41:12.823 に答える
0

コードは正常に見え、mantissa = "2.66"、sign="negate"で期待どおりに実行されました。それでも問題が発生する場合は、デバッグしてみてください。また、.classがどこかにキャッシュされていないことを確認してください....私はそれが発生し、奇妙な問題を引き起こすことを知っています。

于 2010-03-18T08:55:45.183 に答える
0

正しい結果が得られます。parses の値がexponent負になると思います。

于 2010-03-18T08:38:21.870 に答える
0

指数は負になる場合があります。1未満の数値用です。

掛けたいのは仮数です。それが整数の符号を制御するものです。

-0.02 = -1 * 2 * 10^(-2) = sign * mantissa * base ^ exp
于 2010-03-18T08:40:58.900 に答える