是否存在产生商和提醒的除法运算?

时间:2015-12-05 10:56:23

标签: scala math division modulo

目前我写了一些丑陋的代码,比如

    def div(dividend: Int, divisor: Int) = {
        val q = dividend / divisor
        val mod = dividend % divisor
        (q, mod)
    } 

是否在标准库中指定?

4 个答案:

答案 0 :(得分:14)

游戏有点晚了,但是自从Scala 2.8起作用了这个:

import scala.math.Integral.Implicits._

val (quotient, remainder) = 5 /% 2

答案 1 :(得分:5)

BigInt中,注意/%操作,该操作与分组和提醒一起提供一对(请参阅API)。例如注意

scala> BigInt(3) /% BigInt(2)
(scala.math.BigInt, scala.math.BigInt) = (1,1)

scala> BigInt(3) /% 2
(scala.math.BigInt, scala.math.BigInt) = (1,1)

其中第二个示例涉及从IntBigInt的隐式转换。

答案 2 :(得分:5)

否(BigInt除外,如其他答案中所述),但您可以添加它:

implicit class QuotRem[T: Integral](x: T) {
  def /%(y: T) = (x / y, x % y)
}

适用于所有整数类型。您可以通过为每种类型创建单独的类来提高性能,例如

implicit class QuotRemInt(x: Int) extends AnyVal {
  def /%(y: Int) = (x / y, x % y)
}

答案 3 :(得分:0)

BigInt做到了

def /%(that: BigInt): (BigInt, BigInt)
  

Division和Remainder - 返回包含divideToIntegralValue和余数结果的元组。