【发布时间】:2016-04-25 18:04:43
【问题描述】:
在 Java 类上工作,这让我抓狂,因为这个表达式的计算结果为零,我需要它计算为 double,然后将其向下舍入到最接近的 int。所以我想要得到的是天数是整数天,但是当我通过 java 运行它时,它评估为 0。当我通过我的计算器运行它时,它评估为正确的值。我很想修复并解释为什么我已经拥有的东西不起作用。
public int getEventDays(){
//variables
double daysCalc;
int days;
//logic
if (getStatus().equals("filling")){
//this is indented less to fit everything on one line, its not this way in
//the fractions are for unit conversion
daysCalc= Math.floor(((capacity-storage)/(inflow-outflow))*(43560)*(1/3600)*(1/24));
days = (int)daysCalc;
}
else if (getStatus().equals("emptying")){
//this is indented less to fit everything
//the fractions are for unit conversion
daysCalc=Math.floor(((storage-0)/(outflow-inflow))*(43560)*(1/3600)*(1/24));
days = (int)daysCalc;
}
else{
days = -1;
}
return days;
}
【问题讨论】:
-
if (getStatus() == "filling"){你不能像那样比较字符串...我希望它总是返回-1。你怎么打电话/你怎么知道它返回 0? -
1/3600是0。试试1D/3600。 1D 可能已经正式解散,但他们可以通过我们的代码继续存在(以及1D/24也是) -
虽然它现在不会导致您的问题,但How do I compare strings in Java? 将帮助您避免将来出现问题。
-
@John3136 我在 jgrasp 上运行了一些名为 getEventDay() 的测试代码上的调试器,当我单步执行它时,我看到它的评估结果为 0
-
不,当然不是。但这不是贝卡的问题。这是需要修复的整数除法。
标签: java unit-conversion