0

我试图将双精度值乘以 -1 以获得负值。它继续给我一个积极的价值

编辑:我把所有的代码都放了。

公共类 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;
}

}

打印的结果是

13.93 - 减 - 2.0

这是正确的,除了 2.0 应该是 -2.0

4

7 回答 7

2

我怀疑在else分支中, 的解析值exp已经是负数,因此否定它会导致您看到的正值。尝试在否定之前打印出它的值。

exponent如果您显示/打印了虽然的原始值,它肯定会帮助我们(和您) 。

于 2010-03-18T08:36:23.873 回答
2

您正在对符号字符串做出乘法决定。因此,如果您包含更多代码会有所帮助。显示如何设置标志

于 2010-03-18T08:37:16.073 回答
1

我无法理解您的问题,代码和输出对我来说都不错。

我会在乘法之前添加一个调试语句(“System.out.println(exp)”),以更好地了解程序行为是否正确。

于 2010-03-18T08:38:55.150 回答
1

包装一个方法并用你的断言添加一个单元测试——它是通过还是失败?

还有 DRY - 您不妨在 if 语句之前解析指数,因为无论如何您都在两个分支中都这样做。

于 2010-03-18T08:41:12.823 回答
0

它给出了正确的结果。我猜 parses 的值是exponent负数。

于 2010-03-18T08:38:21.870 回答
0

指数可以是负数。它适用于小于 1 的数字。

你想乘的是尾数。这就是控制整数符号的原因。

-0.02 = -1 * 2 * 10^(-2) = sign * mantissa * base ^ exp
于 2010-03-18T08:40:58.900 回答
0

Your code looks fine, and it executed as expected with mantissa = "2.66", and sign="negate". Try debugging into it if you're still facing problems. Also check to see the .class is not being cached someplace .... I've known that to happen, and cause weird problems.

于 2010-03-18T08:55:45.183 回答