Frage

Ich versuche, einen doppelten Wert zu multiplizieren, um -1 den negativen Wert zu erhalten. Weiter geht es mir einen positiven Wert geben

EDIT:. ich den gesamten Code Aufstellen

public class 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;
}

}

Das Drucker ist

  

13,93 - minus - 2,0

, die außer daß 2,0 korrekt ist, sollte -2,0

sein
War es hilfreich?

Lösung

Ich vermute, dass in der else Zweig, der geparsten Wert von exp bereits negativ ist, so negiert es ergibt sich der positive Wert, den Sie sehen. Versuchen Sie seinen Wert auszudrucken vor die Negation.

Es würde uns sicherlich helfen (und Ihnen), wenn Sie / zeigen, obwohl den ursprünglichen Wert von exponent gedruckt.

Andere Tipps

Sie machen die Multiplikation Entscheidung über den Zeichen-String. so würde es helfen, wenn Sie mehr Code enthalten würde. das zeigt, wie Vorzeichen eingerichtet wird

Ich kann nicht verstehen das Problem, sowohl den Code und die Ausgabe aussehen ok für mich.

Ich würde hinzufügen, eine Debug-Anweisung ( „System.out.println (exp)“) vor der Multiplikation um besser zu verstehen, wenn das Programmverhalten richtig ist.

Wrap in einem Verfahren und fügen Sie einen Unit-Test mit Ihren Behauptungen - macht es besteht oder nicht bestanden

Auch DRY -. Sie könnte auch den Exponenten vor dem if-Anweisung analysieren, da Sie es in beiden Zweigen tun sowieso

Es gibt korrektes Ergebnis. Ich denke, den Wert von exponent Parsen auf negativ.

kann Exponent negativ sein. Es ist für Zahlen kleiner als 1 ist.

Was Sie wollen, zu multiplizieren ist die Mantisse. Das ist, was das Zeichen der Gesamtzahl steuert.

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

Der Code sieht gut aus, und es erwartungsgemäß ausgeführt wird mit Mantisse = „2.66“ und Zeichen = „negieren“. Versuchen Sie, in es das Debuggen, wenn Sie immer noch Probleme. Überprüfen Sie auch die .class nicht irgendwo zwischengespeichert werden .... Ich bin dafür bekannt, dass das passiert, und Ursache seltsame Probleme.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top