Почему умножение двойного на -1 не дает отрицательный результат текущего ответа - PullRequest
0 голосов
/ 18 марта 2010

Я пытаюсь умножить двойное значение на -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

Ответы [ 7 ]

2 голосов
/ 18 марта 2010

Вы принимаете решение о умножении на строку знака. так что было бы полезно, если бы вы включили больше кода. показывая, как устанавливается знак

2 голосов
/ 18 марта 2010

Я подозреваю, что в ветви else проанализированное значение exp уже отрицательно, поэтому отрицание его приводит к положительному значению, которое вы видите. Попробуйте распечатать его значение до отрицания.

Конечно, это помогло бы нам (и вам), если бы вы показали / напечатали исходное значение exponent.

1 голос
/ 18 марта 2010

Заверните в метод и добавьте модульный тест с вашими утверждениями - он проходит или не проходит?

Также СУХОЙ - вы могли бы также проанализировать экспоненту перед оператором if, так как вы все равно делаете это в обеих ветвях.

1 голос
/ 18 марта 2010

Я не могу понять вашу проблему, и код, и вывод выглядят нормально для меня.

Я бы добавил оператор отладки ("System.out.println (exp)") перед умножением, чтобы лучше понять, правильное ли поведение программы.

0 голосов
/ 18 марта 2010

Ваш код выглядит нормально, и он выполняется, как и ожидалось, с mantissa = "2.66" и sign = "negate". Попробуйте отладку, если у вас все еще есть проблемы. Также проверьте, чтобы .class где-то не кэшировался ... Я знал, что это происходит и вызывает странные проблемы.

0 голосов
/ 18 марта 2010

Экспонент может быть отрицательным. Для чисел меньше 1.

То, что вы хотите умножить, - это мантисса. Вот что контролирует знак целого числа.

-0.02 = -1 * 2 * 10^(-2) = sign * mantissa * base ^ exp
0 голосов
/ 18 марта 2010

Это дает правильный результат. Я предполагаю, что значение exponent анализируется как отрицательное.

...