2010-03-18 4 views
0

J'essaye de multiplier une double valeur par -1 pour obtenir la valeur négative. Il continue à me donner une valeur positivePourquoi multiplier un double par -1 ne donne pas le négatif de la réponse actuelle

EDIT: Je mets tout le code.

DecToTime public class {

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

+0

L'autre code fonctionne très bien, donc je ne l'ai pas inclus car il ne serait pas nécessaire. – Ankur

+3

Êtes-vous sûr que "else" est déjà touché? –

+0

Qu'est-ce que System.out.println ("|" + exponent + "|"); montrer? –

Répondre

2

Je soupçonne que dans la branche else, la valeur analysée de exp est déjà négative, donc l'annuler entraîne la valeur positive que vous voyez. Essayez d'imprimer sa valeur avant la négation.

Cela nous aiderait certainement (et vous) si vous avez montré/imprimé la valeur originale de exponent cependant.

2

Vous prenez la décision de multiplication sur la chaîne de signes. il serait donc utile si vous incluez plus de code. montrant comment le signe est configuré

0

Il donne un résultat correct. Je suppose que la valeur de exponent analyse en négatif.

1

Je n'arrive pas à comprendre votre problème, le code et la sortie me semblent corrects.

Je voudrais ajouter une instruction de débogage ("System.out.println (exp)") avant la multiplication pour mieux comprendre si le comportement du programme est correct.

0

L'exposant peut être négatif. C'est pour des nombres plus petits que 1.

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 
1

envelopper dans une méthode et d'ajouter un test unitaire avec vos affirmations - t-il ou ne passe? DRY - vous pouvez aussi bien analyser l'exposant avant l'instruction if puisque vous le faites dans les deux branches de toute façon.

0

Votre code a l'air bien, et il s'est exécuté comme prévu avec mantissa = "2.66", et signe = "annuler". Essayez de déboguer si vous rencontrez toujours des problèmes. Vérifiez également pour voir la classe .class n'est pas mise en cache quelque part .... Je l'ai su que cela arrive, et cause des problèmes étranges.

Questions connexes