将 BigDecimal 转换为 BigInt Scala

Convert BigDecimal to BigInt Scala

如何在 Scala 中将 BigDecimal 转换为 BigInt?

我正在尝试 运行 以下代码:

val x:BigDecimal = 2.335656787776;
    val y = new BigInt(x); 

我得到的错误是:

Found:    (PlayGround.x : BigDecimal)
Required: java.math.BigInteger

而当我这样做时:

val x:BigDecimal = 2.335656787776;
val y = BigInt(x);   

我得到:

None of the overloaded alternatives of method apply in object BigInt with types
 (x: java.math.BigInteger): BigInt
 (x: String, radix: Int): BigInt
 (x: String): BigInt
 (numbits: Int, rnd: scala.util.Random): BigInt
 (bitlength: Int, certainty: Int, rnd: scala.util.Random): BigInt
 (signum: Int, magnitude: Array[Byte]): BigInt
 (x: Array[Byte]): BigInt
 (l: Long): BigInt
 (i: Int): BigInt
match arguments ((PlayGround.x : BigDecimal))

如何将 BigDecimal 转换为 BigInt?

我找到的解决方法是:

val x:BigDecimal = 2.335656787776;
val y = BigInt("%.0f".format(x)); 

有没有更好的方法呢?

使用.toBigInt

val x: BigDecimal = 2.335656787776
x.toBigInt // returns 2

toBigInt 满足您的需求。来自 docs

Converts this BigDecimal to a scala.BigInt.

执行以下操作:

new BigInt(this.bigDecimal.toBigInteger)

还有toBigIntExact其中returns一个选项,如果转换可以无损完成的话。