2010-03-18 3 views
0

음수 값을 얻기 위해 double 값에 -1을 곱하려고합니다. 그것은 나에게 긍정적 인 가치를 계속 제공합니다.두 배로 -1을 곱하면 현재 답변의 음수가 표시되지 않습니다.

편집 : 나는 모든 코드를 올리고 있습니다. 마이너스 - - 그 2.0이 있어야한다를 제외하고 올 2.0

공용 클래스 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

+0

다른 코드는 정상적으로 작동하므로 불필요한만큼 코드를 포함하지 않았습니다. – Ankur

+3

"else"가 맞았습니까? –

+0

System.out.println ("|"+ exponent + "|")은 무엇입니까? 보여 주다? –

답변

2

else 브랜치에서 파싱 된 값이 exp 인 것은 이미 음수라고 생각합니다. 따라서 부정하면 결과 값이 양수가됩니다. 부정 값 앞에 값 을 인쇄 해보십시오.

exponent의 원래 값을 표시하거나 인쇄하면 확실히 도움이됩니다.

2

부호 문자열에 대해 곱하기 결정을 내리고 있습니다. 그래서 더 많은 코드를 포함 시키면 도움이 될 것입니다. 어떻게 기호가 설정되고 있는지 보여주기

0

올바른 결과를 제공합니다. 나는 exponent의 값이 음수로 해석되는 것으로 추측합니다.

1

나는 당신의 문제를 이해할 수 없다. 코드와 출력물은 나에게 잘 들었다.

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

0

지수는 음수 일 수 있습니다. 1보다 작은 숫자입니다.

가수를 곱하면됩니다. 그것이 정수의 부호를 제어합니다.

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

어설 션으로 단위 테스트를 추가하십시오. 합격 또는 불합격합니까?

DRY - 어쨌든 두 분기에서 모두 수행하기 때문에 if 문 앞에 지수를 파싱 할 수도 있습니다.

0

코드가 정상적으로 보였으며 mantissa = "2.66"및 sign = "negate"로 예상대로 실행되었습니다. 문제가 계속되는 경우 디버깅을 시도하십시오. 또한 .class가 어딘가에서 캐시되고 있지 않음을 확인하십시오. 나는 일어날 것을 알고 있으며 이상한 문제를 일으켰습니다.

관련 문제