gpt4 book ai didi

ruby-on-rails - 如何强制执行 BigDecimal 的有效位数

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:51 25 4
gpt4 key购买 nike

我在 mysql(例如 10.0001)中定义了一个小数字段,其小数位/有效数字为 4。 ActiveRecord 将其作为 BigDecimal 返回。

我可以在 ActiveRecord 中将字段设置为 5(例如 10.00001 ),然后保存它,这会有效地截断该值(它存储为 10.0000)。

有没有办法避免这种情况?如果有办法强制缩放,我已经查看了 BigDecimal 类。找不到一个。我可以计算 BigDecimal 的小数位数并返回验证错误,但我想知道是否有更好的方法来执行它。

最佳答案

您可以为您的类添加一个 before_save 处理程序,并包含根据您的喜好舍入的逻辑,例如:

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

比例因子甚至可以通过以某种方式读取模式来自动分配。

查看 Ruby 中的 ROUND_* 常量名称 BigDecimal其他舍入模式的类文档。

关于ruby-on-rails - 如何强制执行 BigDecimal 的有效位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com