Java 将一个Double与一个方法计算出的Double值相等,结果为0.0?有什么问题吗?

Java 将一个Double与一个方法计算出的Double值相等,结果为0.0?有什么问题吗?,java,if-statement,casting,double,Java,If Statement,Casting,Double,对于这些表达式: if (lim != null) { for (int i = 0; i < itemlist.size(); i++) { Double itemquantity = calculateQuantity(itemlist.get(i)); Integer limitvalue = lim.getValue(); System.out.

对于这些表达式:

     if (lim != null) {


         for (int i = 0; i < itemlist.size(); i++) {              

            Double itemquantity = calculateQuantity(itemlist.get(i));

            Integer limitvalue = lim.getValue();

            System.out.println("CALCULATED VALUE IS: " + calculateQuantity(itemlist.get(i)));

            System.out.println("ITEMQUANTITY IS " + itemquantity);

            System.out.println("LIMIT VALUE IS " + limitvalue);

           if (itemquantity < limitvalue) {
               System.out.println("QUANTITY " + itemquantity + " vs LIMIT " + limitvalue);
           below.add(itemlist.get(i).getName());
        }}
下面是calculateQuantity()方法,该方法返回一个Double,但该方法的工作方式与输出相同:

     public Double calculateQuantity(Items item)
        {
        Double quantity = 0.0;     
        int ID = item.getItemId();
            try {
                session = sessionFactory.openSession();
                transaction = session.beginTransaction();

                Query query = session.createQuery("select sum(t.flow * a.inOrOut) from Advicenote a join a.transactions t join t.item i where i.itemId = :keyword group by i.itemId");

                query.setParameter("keyword", ID);
                transaction.commit();
                if (query.uniqueResult() == null || query.list().isEmpty()) {
                    quantity = 0.0;                
                } 
                else{     
                quantity = Double.valueOf(query.uniqueResult().toString()); 

                }}catch (HibernateException e) {
            if (transaction != null) {
                transaction.rollback();
            }

}finally{
                        session.close();
                        return quantity;
                        }}

因此,我的问题是,当我尝试将calculateQuantity()的结果与一个双精度值相等时,为什么我得到0?如果语句工作(前者应该是双精度/双精度,后者应该是整数/int),那么如何使
itemquantity

    if(query.uniqueResult() == null || query.list().isEmpty())
正在开火。这意味着您的查询存在问题,超出了此问题的范围

以下方面应起作用:

    if(itemquantity < limitvalue)
if(itemquantity

因为Java支持不同数值类型之间的比较,而无需显式转换。double和int都属于这一类。

在第一次调用
calculateQuantity
时,使用调试器检查行为。我猜第一个查询结果不是你想的expect@jhamon但是我打印出它的值,它等于
计算出的值是:210.0
否,您打印出第二次调用
calculateQuantity
的结果。因此,将重新执行查询,因此结果可能不同。这就是为什么你需要使用一步一步的调试程序。如果查询没有结果,结果太多或者出现异常,我不太喜欢DB查询,那么真的需要一个事务来读取吗?(该方法名为computeQuantity(),我发现它的实际用途令人惊讶……这很少是一个好迹象)除此之外,至少在catch块中记录一些内容不是更好吗?但是该方法可以工作,因为当我打印出
System.out.println(“计算值是:“+calculateQuantity(itemlist.get(I))
我得到
计算值是:210.0
,这是我期望得到的,只有当我将这个表达式与
itemquantity
相等时,它才变成0,这就是为什么它如此奇怪的原因…@Fluellen可能是第一次运行该方法时,它失败了,第二次由于第一次运行它时所做的更改而工作。
    if(itemquantity < limitvalue)