Anorm解析浮点值 [英] Anorm parse float values

查看:86
本文介绍了Anorm解析浮点值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Play Framework 2.0中,我试图使用像这样的行解析器从PostgreSQL加载一个实型(即单精度浮点数)类型的列:

In Play framework 2.0, I'm trying to load a real (i.e. single precision float) type column from PostgreSQL using a row parser like this:

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)
        }
    }
}

这会产生错误:could not find implicit value for parameter extractor: anorm.Column[Float]

使用双精度类型时,一切正常.可以在Anorm中使用单精度浮子吗?

When using double precision types everything works fine. Is it somehow possible to use single precision floats with Anorm?

推荐答案

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

You can always create your own column parser base on the existing ones:

 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驱动程序返回的值类型匹配,该值可能不正确(取决于列定义).

but it matches on the type of value returned by the JDBC driver which may not be correct (depends on the column definition).

这篇关于Anorm解析浮点值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆