在Java中比较BigDecimal和int

13
在Java中比较BigDecimal和int,哪种方式更好:将BigDecimal转换为int还是将int转换为BigDecimal?

如果将BigDecimal转换为int,你可能会超过其范围。 - Oliver Charlesworth
4个回答

13

如果你期望的BigDecimal值非常大(即超出了int值的范围,该范围为-231到231-1),或者包含小数位,或者只是想保险起见,你应该将int转换为BigDecimal以避免溢出/截断错误。

否则,如果性能真的是一个非常重要的问题(这很少见),那么反过来可能更好。


1
这正是我想知道的!谢谢@peter! - HighBit

2
你想将 int 转换为 BigDecimal
这是因为你不总能将 BigDecimal 转换为 int;你会失去小数点后的任何信息,并且 BigDecimal 的值可能超出 int 的范围。

1

由于BigDecimal扩展了int的范围,因此您必须将int转换为BigDecimal以确保它们可以进行比较。


0

不将int转换为BigDecimal的一个原因是,这样做会创建一个新对象,因此您实际上是在堆上产生垃圾以执行相等性。此外,原始相等性比实际的BigInteger对象更快。


为什么这会是“在堆上抛垃圾”? - Oliver Charlesworth
但这可能会导致溢出,结果可能不正确。如果BigDecimal bd = maxint +1并且将bd转换为int,则结果将为1。 - nist
当然,这取决于实际的应用情况。对于比较案例,每次您都会创建一个新的BigInteger对象,这可能是不必要的,并且驻留在堆上,而不是使用已存储在BigInt对象本身中的实际基元值。 - Bober02

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接