Ruby on rails 设置rails中所有十进制数字的默认精度

Ruby on rails 设置rails中所有十进制数字的默认精度,ruby-on-rails,Ruby On Rails,有没有办法强制Rails以一定的精度输出所有十进制数?我数据库中的所有十进制字段都是货币金额,因此我希望默认情况下显示精度为2(即2.40)的十进制数字。我知道我可以使用像“number\u to\u currency”这样的帮助函数来处理每个数字,但这似乎有点乏味和不必要 如果你不介意monkey修补ruby,你可以添加一个类似这样的东西(放在“/config/initializers/core_extensions.rb”的初始化器中): 如果您担心在Float上覆盖“to_s”可能会产生不

有没有办法强制Rails以一定的精度输出所有十进制数?我数据库中的所有十进制字段都是货币金额,因此我希望默认情况下显示精度为2(即2.40)的十进制数字。我知道我可以使用像“number\u to\u currency”这样的帮助函数来处理每个数字,但这似乎有点乏味和不必要

如果你不介意monkey修补ruby,你可以添加一个类似这样的东西(放在“/config/initializers/core_extensions.rb”的初始化器中):


如果您担心在Float上覆盖“to_s”可能会产生不可预见的副作用,那么您的下一个最佳选择可能是创建一个新方法,但仍然作为核心扩展。大概是这样的:

class Float
    def c
        sprintf('%.2f', self)
    end
end
这样就不会产生任何不可预见的后果,然后在任何你想用两位小数显示数字的地方,你只要调用
.c
。例如:

message = "The account balance is $#{amount.c}."

不是自动的,但是没有太多额外的输入,并且没有覆盖到可能导致的潜在副作用。

谢谢。不过,我不想弄乱ruby。@Jude,好吧,这并不是真的“弄乱ruby”--它只是一个猴子补丁,可以改变你应用程序的行为。如果你的应用程序中没有任何实例不希望显示精度为两位小数的浮点,我不认为这有什么害处。你可以编辑原始问题以添加新信息,而不是添加第二个答案。这很有帮助,Ben。谢谢你。@Jimmy,我知道,如果我只是编辑或者想更改我的答案,我通常会这样做,但在这种情况下,我认为两个答案都有各自的优点,特别是考虑到最初的海报上说他不想惹ruby。我仍然想留下这个答案,但作为参考,以防其他人看到这篇文章,喜欢更直接的猴子补丁。
message = "The account balance is $#{amount.c}."