ruby-on-rails 使用`number_to_currency`将货币舍入到最接近的5美分

qvtsj1bj  于 2023-05-19  发布在  Ruby
关注(0)|答案(2)|浏览(163)

Rails在提供国际通用的视图助手方面做得很好。这也适用于货币,使用助手number_to_currency。但是,根据文档,我无法找到如何将该助手调整为特殊情况,即瑞士法郎(CHF)。
货币CHF的问题是最小的硬币是5美分,即最小步长为CHF 1.00、1.05、1.10、1.15等。没有1.01这样的东西。
这里显而易见的解决方案是乘以2,四舍五入,然后再次除以2。然而,我希望number_to_currency,它在其他方面是如此强大,应该也能够解决这个问题。是这样吗?

omjgkv6w

omjgkv6w1#

正如其他人所指出的,number_to_currency是一个字符串格式化程序。您正在寻找其他东西,与演示无关,但要使实际数字在您的瑞士货币上下文中有效。
所以我只需要像这样扩展Float类:

class Float
  def rounded_to_5_cents
    ((self*2).round(1))/2
  end
end
# number_to_currency((55.03).rounded_to_5_cents, unit: "CHF") => CHF55.05
nx7onnlm

nx7onnlm2#

舍入不是该方法的可用选项之一。
我建议在将其传递给number_to_currency方法之前将其舍入,因为返回值是String

相关问题