Java输出不如预期

时间:2015-07-17 08:27:33

标签: java

我是Java的新手,我写了一些不能提供我期望的输出的代码。

if (!"".equals(S_USD_EXCH_RATE)
        && !S_USD_EXCH_RATE.equalsIgnoreCase("---")) {
    exchRate = Double.parseDouble(S_USD_EXCH_RATE);
}
if (S_NW < 0 || (S_FA / S_NW) > 4)
    return -1;
else if ((S_NW * exchRate) > 75000000.0 && (S_FA / S_NW) < 1.5)
    return 3;
else if ((S_NW * exchRate) > 25000000.0 && (S_FA / S_NW) < 2)
    return 2;
else if (S_NW == 0)
    return 0;
else if ((S_NW * exchRate) >= 1 && (S_FA / S_NW) < 4)
    return 1;
else
    return 1;

S_NW为空时,会返回1的值,而该值应为0。我无法弄清楚为什么当S_NW == 0(它应该涵盖没有价值的情况,如我所理解的)时,应该返回0的输出。有什么想法吗?

根据评论: 我的印象是java知道0要么是数值0还是没有值。这不正确吗?我有一个由java编写的外部主体提供的程序,您可以在其中创建新对象,您可以选择创建数字对象,日期,字符串等.S_NW对象是一个数字。该程序允许对象没有分配数据,因此术语为空,或没有值。希望有所帮助。

根据进一步评论:

我不知道'Number'究竟是指什么,该程序是闭源的。根据您提供的信息,我可以添加另一行来告诉它在NULL的情况下该怎么做,看看是否更好。从评论中,它应该解决它。

继续评论:

是的,这就是我必须要做的。建议的S_NW!= null检查给出了异常错误incomparable types: double and 我想这会使S_NW成为double数据类型

更多信息:

我尝试将代码包装在if S_NW = Double.NaN {}; else return 0中,并且已将else if (S_NW == 0)替换为else if (S_NW == 0 || S_NW == 0.0 || S_NW == Double.NaN),并且在两种情况下仍然会得到1的输出。这没有任何意义,因为这两个编辑相互矛盾,表明S_NW既是== Double.NaN又不等于Double.NaN,这是不对的。除非我真的很厚?

2 个答案:

答案 0 :(得分:0)

看到S_NW为0(S_FA / S_NW)会抛出异常,我们可以断定S_NW不为零。根据数据类型以及如何初始化它,您可能有一个错误,无论如何设置它或者您使用不同于0的值初始化它。我猜它是一个整数或其中null不作为数字处理的东西所有。所以你也需要一个空检查。

答案 1 :(得分:0)

如果S_NW是int,则不能为null 如果S_NW最初是一个String,你可以尝试这个来测试它解析为int时是否为null

       String S_NW="";
       int s_NW_INT;
       try{
            S_NW_INT=Integer.parseInt(S_NW);
        }catch(NumberFormatException ex){
            System.out.println("S_NW is not an int");
        }