Scala Anorm解析浮点值

Scala Anorm解析浮点值,scala,playframework-2.0,anorm,Scala,Playframework 2.0,Anorm,在Play framework 2.0中,我尝试使用如下行解析器从PostgreSQL加载一个实(即单精度浮点)类型的列: case class Foo(bar: Float) object Foo { def all = DB.withConnection { implicit c => SQL("SELECT * FROM foo").as(fooParser *) } val fooParser = { get[Float]

在Play framework 2.0中,我尝试使用如下行解析器从PostgreSQL加载一个实(即单精度浮点)类型的列:

case class Foo(bar: Float)

object Foo {
    def all = DB.withConnection { implicit c =>
        SQL("SELECT * FROM foo").as(fooParser *)
    }

    val fooParser = {
        get[Float]("bar") map {     
          case bar => Foo(bar)
        }
    }
}
这将生成一个错误:
找不到参数提取器的隐式值:anorm.Column[Float]


使用双精度类型时,一切正常。是否可以在Anorm中使用单精度浮点?

您始终可以在现有列解析器的基础上创建自己的列解析器:

 implicit def rowToFloat: Column[Float] = Column.nonNull { (value, meta) =>
  val MetaDataItem(qualified, nullable, clazz) = meta
  value match {
    case d: Float => Right(d)
    case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Float for column " + qualified))
  }
}
但它与JDBC驱动程序返回的值类型匹配,这可能不正确(取决于列定义)

请在此处查看代码: