没有在Scala中找到BigInt的intValueExact

Mic*_*ael 2 math scala bigint

java.math.BigInteger有类似的方法intValueExact,在溢出的情况下抛出异常.scala类scala.math.BigInt似乎没有这样的方法.

我应该这样做吗?

def intExact(num: BigInt): Int = if (num.isValidInt) num.toInt else // throw an exception
Run Code Online (Sandbox Code Playgroud)

Rüd*_*ehn 5

scala.math.BigInt只是java.math.BigInteger的一个瘦包装器.因此,您可以在没有任何性能问题的情况下执行以下操作(在Java8上)

scala> val x: BigInt = 1
x: BigInt = 1

scala> x.bigInteger.intValueExact
res0: Int = 1
Run Code Online (Sandbox Code Playgroud)

假设你可以抛出异常.否则使用@jazmit建议的内容.

注意:如果你想要一个非常快的任意精度整数,我建议使用spire.math.SafeLong.只要数量足够小,它就会在引擎盖下使用Long,因此在许多常见情况下它会非常快.

SafeLong有一个方法isValidLong来检查值是否适合long.