Warum Multiplikation eines Doppel mit -1 nicht das Negativ der aktuellen Antwort geben
-
20-09-2019 - |
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
seinLö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.