Double에 -1을 곱하면 현재 답변의 음수가 제공되지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2468351

문제

음수 값을 얻기 위해 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이어야 한다는 점을 제외하면 정확합니다.

도움이 되었습니까?

해결책

나는 그것을 의심한다 else 분기, 구문 분석 값 exp 이미 부정적이므로 부정하면 긍정적 인 값이 나타납니다. 그 가치를 인쇄 해보세요 ~ 전에 부정.

원래 가치를 보여 주거나 인쇄한다면 그것은 우리 (그리고 당신)에게 확실히 도움이 될 것입니다. exponent 그렇지만.

다른 팁

부호 문자열에 대한 곱셈 결정을 내리고 있습니다. 따라서 더 많은 코드를 포함 시키면 도움이 될 것입니다. 표시가 어떻게 설정되고 있는지 보여줍니다

나는 당신의 문제를 이해할 수 없다. 코드와 출력은 나에게 괜찮아 보인다.

프로그램 동작이 옳은지 더 잘 이해하기 위해 곱하기 전에 디버깅 문 ( "System.out.println (exp)")을 추가합니다.

메소드를 감싸고 어설 션으로 단위 테스트를 추가하십시오 - 통과 또는 실패합니까?

또한 건조 - 어쨌든 두 가지에서 수행하기 때문에 IF 문 앞에 지수를 구문 분석 할 수도 있습니다.

올바른 결과를 제공합니다. 나는의 가치를 생각한다 exponent 부정적인 구문 분석.

지수는 음수일 수 있습니다.1보다 작은 수에 대한 것입니다.

곱하려는 것은 가수입니다.이것이 정수의 부호를 제어하는 ​​것입니다.

-0.02 = -1 * 2 * 10^(-2) = sign * mantissa * base ^ exp

코드는 괜찮아 보이며 Mantissa = "2.66"및 sign = "Negate"로 예상대로 실행됩니다. 여전히 문제에 직면 해있는 경우 디버깅을 해보십시오. 또한 .class가 어딘가에 캐시되지 않는 것을 확인하십시오 .... 나는 그런 일이 일어나고 이상한 문제를 일으킨다는 것을 알고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top