Pourquoi ne multipliant un double de -1 ne pas donner la forme négative de la réponse actuelle
-
20-09-2019 - |
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
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.