将 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<integer FinalPayments>
我确定你的意图是:List<Integer> FinalPayments
这个错误意味着你正在尝试像(Integer)val
这样的演员你尝试过使用BigInteger的intValue()
方法吗?
付款是整数是有原因的。我质疑为什么 BigDecimal 甚至参与其中。您不能改为将数据库的数据类型更改为整数吗?这样您就不会遭受数据丢失的困扰。
是的。 'List在 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说类型不能转换,求解释!