Rails 3.如何以编辑形式显示两位小数?


70

我有这个编辑表格。

但是,当我存储1.5之类的东西时,我希望将其显示为1.50。

我该如何使用表单助手? <%= f.text_field :cost, :class => 'cost' %>

Answers:


169

您应该使用number_with_precision助手。请参阅doc

例:

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_currencydoc的同一页面(在表单上下文中,我会保留number_with_precision,您不想弄乱货币符号)



辉煌,谢谢!值得注意的是,|| 0除非用户删除该值,否则使用将会阻止显示任何HTML5占位符值。同样,擦除该字段可能会导致数字验证出现问题(因为当您想要的是值属性时,会有一个空值属性)。一点点JS都无法解决,但是在这种情况下,Rails似乎应该更聪明一些。
汤姆·哈里森


10

为此,我使用number_to_currency格式化程序。由于我在美国,默认设置对我来说很好。

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

如果默认设置不适合您,您还可以传递选项。api.rubyonrails.org上有关可用选项的文档


7

Rails提供了一个number_to_currency帮助器方法,该方法可能更适合您的特定用例。


我认为可接受的答案更接近-number_to_currency导致格式化的字符串,Rails无法将其强制转换回浮点数。 number_with_precision可能是更好的选择。
汤姆·哈里森

@TomHarrisonJr确保可以将其转换回浮点型。price = "$3.99"; price.slice!("$"); puts price.to_f => 3.99这仅取决于您想要的用户体验。有些人可能想要将美元符号放入输入框中的功能。我知道我喜欢选择。
bfcoder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.