当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否存在产生商和提醒的除法运算?》经验,为你挑选了3个好方法。

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

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

是否在标准库中指定?



1> 小智..:

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

import scala.math.Integral.Implicits._

val (quotient, remainder) = 5 /% 2


看[source(Integral.scala)](https://github.com/scala/scala/blob/d96b8eb48e83d400c03663a05b66ec218ead9c14/src/library/scala/math/Integral.scala#L24),这只是语法糖一口气进行两次单独的操作。

2> Alexey Roman..:

否(除了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)
}


你当然可以做`val z = x/y; (z,x - z*y)`以避免`mod`,但最终可能会变慢.

3> elm..:

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.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有