将 BigDecimal 转换为 Integer 时出现问题

Posted

技术标签:

【中文标题】将 BigDecimal 转换为 Integer 时出现问题【英文标题】:issue while converting BigDecimal to Integer 【发布时间】:2015-06-18 19:00:57 【问题描述】:

我在将 Big Decimal 转换为 Integer 时遇到问题。 我的过程描述是,首先我会将整数列表发送到 DAO 方法中,以验证整数是否有效以继续进行。然后在另一个地方处理有效的整数列表。

核心流程

List<Integer> payments = DAO.checkStatus(payments); //payments is List of    Integer
if(payments!=null)
    //Do some other operation
    DAO.changeStatus(payments);  //Here payments is List of Integer which we  got from above

DAO 方法实现

    checkStatus(List<Integer> payments)
        List<Integer> FinalPayments = null;
        //I have Hibernate query to get the details from Database
        String HQL_Query = "select A.PY from T_Status A where A.status = 4 and  (A.PY=:payments)";
        Query query = session.CreateQuery(HQL_Query);
        FinalPayments = query.list();
        return FinalPayments;
    
    

    DataBase PY 列中有一个 BigDecimal。在表中其定义为 NUMBER。类型。在执行查询时,我得到了 FinalPayments 列表的 BigDecimal 值。没有错误/异常。 BigDecimal 值已正确返回。

    在核心进程中,第一种方法之后:

    if(payments!=null)
    //we're doing something with List of Integer payments right?
    //It is passed to 2nd method.
    
    changeStatus(List<Integer> FinalPayments)
        String HQL_Query="update T_Status A set A.status = 6 where (A.PY:=FinalPayments)";
        Query query = session.CreateQuery(HQL_Query);
        query.setParameter("FinalPayments", FinalPayments);  //Here i'm getting error
        List<Integer> paymentsAfter = query.list();
    
    

    错误是: 无法将 java.math.BigDecimal 转换为 java.lang.Integer

    在第一种和第二种方法之间,我尝试将 BigDecimal 转换为 Integer。但不能再次将整数列表转换为整数。但我需要那些采用整数格式来处理第二种方法。请帮忙解决这个问题。。

【问题讨论】:

你这里有一个错字:List&lt;integer FinalPayments&gt;我确定你的意图是:List&lt;Integer&gt; FinalPayments 这个错误意味着你正在尝试像(Integer)val这样的演员你尝试过使用BigInteger的intValue()方法吗? 付款是整数是有原因的。我质疑为什么 BigDecimal 甚至参与其中。您不能改为将数据库的数据类型更改为整数吗?这样您就不会遭受数据丢失的困扰。 是的。 'List FinalPayments' 是 changeStatus() 方法的正确参数。 @Tyler:是的。错误是当我尝试以 b/w 2 方法进行转换时。但实际错误是在执行查询时遇到第二种方法 【参考方案1】:

在 BigDecimal 对象上使用 intValue() 方法来获取它的 int 值。

【讨论】:

请执行?我没有得到你 首先,我改变了答案。所以先读一读。我的意思是这样做: int myInt = myBigDecimal.intValue();这将为您提供 BigDecimal 的 int 值。欲了解更多信息,请转至docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html 我也试过了。但不能因为对象本身是整数列表。我可以说,Finalpayments.intValue();在第一种方法之后的循环中。但在那一点上,我也遇到了错误。 :( 然后使用迭代器或使用 for 循环将该列表中的每个元素转换为 int 并将这些转换后的元素添加到新列表中。 这就是我在上面的 cmets 中提到的。没有成功【参考方案2】:

我不确定我是否理解你的问题,但如果你有一个 BigDecimal 并且你想要一个 Integer,你可以使用 intValueExact 的 intValue。

例如

List<BigDecimal> decimals = ...
List<Integer> ints = decimals.stream().map(BigDecimal::intValue).collect(Collectors.toList());

【讨论】:

我可以在哪个地方添加这个?在执行查询本身还是在方法之外?

以上是关于将 BigDecimal 转换为 Integer 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

请问,java里,如何把BigDecimal类型转成Integer

java.math.BigDecimal cannot be cast to java.lang.Integer说类型不能转换,求解释!

Long和Integer相互转换

java里面object怎么样转换成int好?

java怎么把BigInteger类型转换为BigDecimal类型

在Java中以美分(整数)转换美元(大十进制)的最佳方法是什么?