我是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
,这是不对的。除非我真的很厚?
答案 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");
}