Question

Je suis en train de multiplier une valeur double par -1 pour obtenir la valeur négative. Il continue de me donner une valeur positive

EDIT:. Je mets tout le haut de code

{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;
}

}

Le résultat imprimé est

  

13,93 - moins - 2,0

qui est correct, sauf que 2,0 devrait être -2,0

Était-ce utile?

La solution

Je pense que dans la branche else, la valeur de analysable exp est déjà négative, si elle aboutit à nier la valeur positive que vous voyez. Essayez d'imprimer sa valeur avant la négation.

Il serait certainement nous aider (et vous) si vous montriez / Imprimées la valeur d'origine de exponent bien.

Autres conseils

Vous faites la décision de multiplication sur la chaîne de signes. il serait utile que vous devez inclure plus de code. montrant comment signe est mise en place

Je ne comprends pas votre problème, à la fois le code et la sortie ok air pour moi.

Je rajouterais une déclaration de débogage ( « System.out.println (exp) ») avant la multiplication afin de mieux comprendre si le comportement du programme est droit.

Enveloppez dans une méthode et ajouter un test unitaire avec vos affirmations - ne passer ou ne

En outre DRY -. Vous pourriez aussi bien analyser l'exposant avant l'instruction if puisque vous le faites dans les deux branches de toute façon

Il donne un résultat correct. Je suppose que la valeur de exponent négative à parse.

Exponent peut être négatif. Il est pour les nombres inférieurs à 1.

Qu'est-ce que vous voulez multiplier est la mantisse. C'est ce qui contrôle le signe du nombre entier.

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

Votre code semble bien, et exécuté comme prévu avec mantisse = « 2.66 », et signe = « Négation ». Essayez débogable si vous rencontrez toujours des problèmes. Vérifiez également la .class n'est pas mis en mémoire cache quelque part .... Je connais que cela se produise, et causer des problèmes étranges.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top