通用转换为数字

Generic conversion to Numeric

我想编写一个通用的转换函数,将 Double 序列转换为任何 Numeric class,类似于:

  def construct[T : Numeric](a: Seq[Double]): Seq[T] = {
    val n = implicitly[Numeric[T]]
    a.map { value =>
      value
      ???
    }
  }

逆向很容易,使用Numeric toDouble,但我没有找到如何做这个方向的方法。怎么办?

n.fromInt(value.toInt),但如果您不想失去精度,那么 scala.math.Numeric 就不走运了。我建议实现你自己的类型 class:

trait Num[T] { def fromDouble(d: Double): T }

object Num { implicit val wateveryouneed = ... }    

def construct[T](a: Seq[Double])(implicit n: Num[T]: Seq[T] =
  a.map(n.fromDouble)