ruby Rails 3.如何在编辑表单中显示两位小数?

biswetbf  于 2022-12-18  发布在  Ruby
关注(0)|答案(5)|浏览(103)

我有一张编辑表。
但是当我存储诸如1. 5之类的东西时,我希望将其显示为1. 50。
如何使用表单帮助程序来完成此操作?<%= f.text_field :cost, :class => 'cost' %>

a0zr77ik

a0zr77ik1#

您应该使用number_with_precision助手。参见文档。
示例:

number_with_precision(1.5, :precision => 2)
=> 1.50

在窗体助手中:

<%= f.text_field :cost, :class => 'cost', :value => (number_with_precision(f.object.cost, :precision => 2) || 0) %>

顺便说一句,如果你真的想显示一些价格,使用number_to_currency,同一页的文档(在一个表单上下文中,我会保持number_with_precision,你不想搞砸了金钱符号)

uwopmtnx

uwopmtnx2#

或者,可以使用格式字符串"%.2f" % 1.5。http://ruby-doc.com/docs/ProgrammingRuby/#Kernel.sprintf

q8l4jmvw

q8l4jmvw3#

为此我使用number_to_currency格式。因为我在美国,默认值对我来说很好用。

<% price = 45.9999 %>
<price><%= number_to_currency(price)%></price>
=> <price>$45.99</price>

如果默认设置不适用,您也可以传入选项。有关可用选项的文档,请访问api.rubyonrails.org

uqdfh47h

uqdfh47h4#

Rails有一个number_to_currency helper方法,它可能更适合您的特定用例。

cx6n0qe3

cx6n0qe35#

这看起来工作得很好,我将其添加到application_helper.rb中

def display_2dp(form, field)
  val = form.object.send(field)
  unless val.nil?
    return '%.2f' % val 
  end
end

像这样使用它:

<%= form.number_field :cost, step: 0.01, value: display_2dp(form, :cost) %>

只需将:cost替换为要显示的字段。
一些优点:

  • 它可在应用程序中的任何表单上重复使用
  • 它不会意外地将nil替换为0(类似于|| 0可能发生的情况)
  • 它将始终精确显示2位小数(例如,10.0将显示为“10.00”)

相关问题