Is there a division operation that produces both quotient and reminder?

前端 未结 4 1859
无人共我
无人共我 2021-01-12 03:00

Currently I write some ugly code like

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


        
相关标签:
4条回答
  • 2021-01-12 03:03

    No (except for BigInt, as mentioned in other answers), but you can add it:

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

    will work for all integral types. You can improve performance by making separate classes for each type such as

    implicit class QuotRemInt(x: Int) extends AnyVal {
      def /%(y: Int) = (x / y, x % y)
    }
    
    0 讨论(0)
  • 2021-01-12 03:04

    A bit late to the game, but since Scala 2.8 this works:

    import scala.math.Integral.Implicits._
    
    val (quotient, remainder) = 5 /% 2
    
    0 讨论(0)
  • 2021-01-12 03:13

    BigInt does it

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

    Division and Remainder - returns tuple containing the result of divideToIntegralValue and the remainder.

    0 讨论(0)
  • 2021-01-12 03:22

    In BigInt, note /% operation which delivers a pair with the division and the reminder (see API). Note for instance

    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)
    

    where the second example involves an implicit conversion from Int to BigInt.

    0 讨论(0)
提交回复
热议问题