将Double与方法中的计算Double值相等会得到0.0?可能是什么问题呢?

问题描述 投票:2回答:2

对于这些表达式:

     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());
        }}

我得到以下结果:

CALCULATED VALUE IS: **210.0** 
ITEMQUANTITY IS **0.0** 
LIMIT VALUE IS **500** 
QUANTITY 0.0 vs LIMIT 500

这是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()的结果与Double值相等时,为什么我得到0?怎么可能使itemquantity < limitvalue if语句工作(前者应该是Double / double,后者应该是Integer / int)?

java if-statement casting double
2个回答
1
投票

最有可能是分支机构

    if(query.uniqueResult() == null || query.list().isEmpty())

正在开火。这意味着您的查询存在问题,这超出了此问题的范围。

以下应该有效:

    if(itemquantity < limitvalue)

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


0
投票

第一次运行时可能会出现HibernateException,将一些print语句放在catch(HibernateException e)块中并查看。

© www.soinside.com 2019 - 2024. All rights reserved.