【问题标题】:Decimal column in postgres. Is there a way to store values without trailing zerospostgres 中的小数列。有没有办法在没有尾随零的情况下存储值
【发布时间】:2014-01-01 01:20:27
【问题描述】:

我有一个使用 postgres 的 rails 模型,有一个 height_value 列,它设置为小数。

我想存储没有尾随零的值,但我认为这对于小数列类型是不可能的?

如果无法以这种方式存储它们,那么在我的模型中修剪尾随零以使它们始终正确显示的最佳方法是什么。我是否应该更改列,是否有可以满足我要求的精度?

所以如果 height_value:

28.5 => 28.5

28.0 => 28

19.75 => 19.75

19.00 => 19

架构

create_table "buildings", force: true do |t|
    t.decimal  "height_value"
end

【问题讨论】:

  • numeric 类型(我认为 Rails 调用 decimal)如果在数据库中定义为简单的 numeric,则应该完全符合您的要求,没有精度或比例设置。不过,您可能很难让 Rails 使用它。

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 decimal


【解决方案1】:

像这样在你的模型中定义一个读取方法。返回的值将是一个字符串

def height_value
 "%g" % read_attribute(:height_value)
end

如果你希望方法返回一个数字,那么

def height_value
 val = read_attribute(:height_value)
 if val == val.to_i
   val.to_i
 else
   val
 end
end

存储的值为十进制,但从数据库返回的值满足要求

【讨论】:

  • 谢谢。我很接近。我有“%g”% height_value 的方法,但没有 read_attribute()
  • 当我去创建一个新记录时,原始答案导致了一个问题,“无法将 nil 转换为 Float”
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
相关资源
最近更新 更多