scala - 在 Scala 中找不到 BigInt 的 intValueExact

标签 scala math bigint

java.math.BigInteger 有类似 intValueExact 的方法,它会在溢出时抛出异常。 scala 类 scala.math.BigInt 似乎没有这样的方法。

我应该这样做吗?

def intExact(num: BigInt): Int = if (num.isValidInt) num.toInt else // throw an exception

最佳答案

scala.math.BigInt只是 java.math.BigInteger 的薄包装。所以你可以在没有任何性能问题的情况下(在 Java8 上)执行以下操作

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

scala> x.bigInteger.intValueExact
res0: Int = 1

假设您可以接受抛出异常。否则使用@jazmit 的建议。

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

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

关于scala - 在 Scala 中找不到 BigInt 的 intValueExact,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808373/

相关文章:

斯卡拉 : reassignment to val

java - Scala classNotFound on Any 类型

scala - 使用circe-optics递归遍历JSON

php - 如何转换 bigint 以防止 php 中的 sql 注入(inject)?

Scala View 过滤器不懒惰?

matlab - 在 matlab/octave 中制作动画图/轨迹

math - 投影-将3d转换为2d

c++ - 对于任意精度,是否有普遍接受的 GMP 替代方案?

java - 在 MySQL : INT vs LONG vs BIGINT 中存储美元金额

php - 如何获得圆半径内的随机 x 和 y 坐标?