跳至内容 跳至搜索

Active Model Decimal 类型

用于十进制的高精度浮点数数值表示的属性类型。它在 :decimal 键下注册。

class BagOfCoffee
  include ActiveModel::Attributes

  attribute :weight, :decimal
end

Numeric 实例被转换为 BigDecimal 实例。任何其他对象都使用它们的 to_d 方法进行强制类型转换,除了空白字符串,它们被强制类型转换为 nil。如果未定义 to_d 方法,则该对象使用 to_s 转换为字符串,然后使用 to_d 进行强制类型转换。

bag = BagOfCoffee.new

bag.weight = 0.01
bag.weight # => 0.1e-1

bag.weight = "0.01"
bag.weight # => 0.1e-1

bag.weight = ""
bag.weight # => nil

bag.weight = :arbitrary
bag.weight # => nil (the result of `.to_s.to_d`)

Decimal 精度默认为 18,可以在声明属性时自定义

class BagOfCoffee
  include ActiveModel::Attributes

  attribute :weight, :decimal, precision: 24
end
方法
T
包含的模块

常量

BIGDECIMAL_PRECISION = 18
 

实例公共方法

type()

# File activemodel/lib/active_model/type/decimal.rb, line 49
def type
  :decimal
end

type_cast_for_schema(value)

# File activemodel/lib/active_model/type/decimal.rb, line 53
def type_cast_for_schema(value)
  value.to_s.inspect
end