有没有同时产生商和提醒的除法运算?
Is there a division operation that produces both quotient and reminder?
目前我写了一些丑陋的代码,比如
def div(dividend: Int, divisor: Int) = {
val q = dividend / divisor
val mod = dividend % divisor
(q, mod)
}
标准库中有规定吗?
在 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)
其中第二个示例涉及从 Int
到 BigInt
的隐式转换。
BigInt 做到了
def /%(that: BigInt): (BigInt, BigInt)
Division and Remainder - returns tuple containing the result of divideToIntegralValue and the remainder.
没有(除了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)
}
游戏有点晚了,但是从 Scala 2.8 开始就可以了:
import scala.math.Integral.Implicits._
val (quotient, remainder) = 5 /% 2
目前我写了一些丑陋的代码,比如
def div(dividend: Int, divisor: Int) = {
val q = dividend / divisor
val mod = dividend % divisor
(q, mod)
}
标准库中有规定吗?
在 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)
其中第二个示例涉及从 Int
到 BigInt
的隐式转换。
BigInt 做到了
def /%(that: BigInt): (BigInt, BigInt)
Division and Remainder - returns tuple containing the result of divideToIntegralValue and the remainder.
没有(除了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)
}
游戏有点晚了,但是从 Scala 2.8 开始就可以了:
import scala.math.Integral.Implicits._
val (quotient, remainder) = 5 /% 2