java.math.BigInteger
有像intValueExact
這樣的方法,它會在溢出時引發異常。斯卡拉類scala.math.BigInt
似乎沒有這樣的方法。在Scala中找不到BigInt的intValueExact
我應該這樣做嗎?
def intExact(num: BigInt): Int = if (num.isValidInt) num.toInt else // throw an exception
java.math.BigInteger
有像intValueExact
這樣的方法,它會在溢出時引發異常。斯卡拉類scala.math.BigInt
似乎沒有這樣的方法。在Scala中找不到BigInt的intValueExact
我應該這樣做嗎?
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來檢查值是否適合長期。
這是完全正確的事情..如果你想在失敗時拋出異常。該「斯卡拉」的方式做事情就會返回一個選項,這樣可以處理的錯誤在一個功能更強大的方式:
def intExact(num: BigInt): Option[Int] = if (num.isValidInt) Some(num.toInt) else None