我试图将double值乘以-1得到负值。它继续给我一个积极的价值
编辑:我正在填写所有代码。
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;
}
}
打印结果是
13.93 - 减去 - 2.0
这是正确的,除了2.0应该是-2.0
答案 0 :(得分:2)
我怀疑在else
分支中,exp
的解析值已经是负数,因此否定它会导致您看到的正值。尝试在否定之前打印出它的值。
如果您展示/打印exponent
的原始值,它肯定会帮助我们(和您)。
答案 1 :(得分:2)
您正在对符号字符串进行乘法决策。所以如果你要包含更多的代码会有所帮助。显示如何设置标志
答案 2 :(得分:1)
我无法理解你的问题,代码和输出对我来说都没问题。
我会在乘法之前添加一个调试语句(“System.out.println(exp)”),以便更好地理解程序行为是否正确。
答案 3 :(得分:1)
包装方法并使用断言添加单元测试 - 它是通过还是失败?
同样DRY - 您也可以在if语句之前解析指数,因为无论如何都要在两个分支中进行解析。
答案 4 :(得分:0)
它给出了正确的结果。我猜exponent
的值解析为负数。
答案 5 :(得分:0)
指数可以是负数。它适用于小于1的数字。
你想要乘以的是尾数。这就是控制整数的符号的原因。
-0.02 = -1 * 2 * 10^(-2) = sign * mantissa * base ^ exp
答案 6 :(得分:0)
您的代码看起来很好,并且按照预期执行mantissa =“2.66”和sign =“negate”。 如果您仍然遇到问题,请尝试调试。还要检查.class是否在某个地方没有被缓存....我知道这会发生,并导致奇怪的问题。