Ruby on rails 如何强制执行BigDecimal的有效位数
我在mysql中定义了一个小数字段,其小数位数/有效位数为4(例如10.0001)。ActiveRecord以BigDecimal的形式返回它 我可以将ActiveRecord中的字段设置为5(例如10.00001),然后保存它,这样可以有效地截断该值(存储为10.0000)Ruby on rails 如何强制执行BigDecimal的有效位数,ruby-on-rails,ruby,bigdecimal,Ruby On Rails,Ruby,Bigdecimal,我在mysql中定义了一个小数字段,其小数位数/有效位数为4(例如10.0001)。ActiveRecord以BigDecimal的形式返回它 我可以将ActiveRecord中的字段设置为5(例如10.00001),然后保存它,这样可以有效地截断该值(存储为10.0000) 有没有办法防止这种情况?我已经研究过BigDecimal类,看是否有强制缩放的方法。找不到。我可以计算BigDecimal的小数位数并返回一个验证错误,但我想知道是否有更好的方法来执行它。您可以在保存类的处理程序之前添加,
有没有办法防止这种情况?我已经研究过BigDecimal类,看是否有强制缩放的方法。找不到。我可以计算BigDecimal的小数位数并返回一个验证错误,但我想知道是否有更好的方法来执行它。您可以在保存类的
处理程序之前添加,并根据自己的喜好包含要舍入的逻辑,例如:
class MyRecord < ActiveRecord::Base
SCALE = 4
before_save :round_decimal_field
def round_decimal_field
self.decimal_field.round(SCALE, BigDecimal::ROUND_UP)
end
end
r = MyRecord.new(:decimal_field => 10.00009)
r.save!
r.decimal_field # => 10.0001
classmyrecord10.00009)
r、 救命!
r、 十进制#u字段#=>10.0001
甚至可以通过某种方式读取模式来自动分配比例因子
有关其他舍入模式,请参见Ruby类文档中的ROUND.*
常量名称