在Sinatra app中格式化十进制显示

时间:2013-02-22 04:55:39

标签: html ruby forms sinatra

我的Sinatra应用程序中有一个价格区域。 DataMapper定义是:

property :purchase_price, Decimal, :precision => 10, :scale => 2

收集价格的输入表格如下所示:

<input type="text" name="price" placeholder="Price" pattern="^\d+\.\d{2}$">

编辑表单,我希望看到价格并可能改变它,看起来像这样:

<input type="text" name="price" value="<%= @book.purchase_price.to_s('F') %>">

当我在表格中显示所有图书及其价格时,价格将通过以下方式显示:

<td><%= book.purchase_price.to_s('F') %></td>

该行在循环中:

<% @books.each do |book| %> ... <% end %>

当美分等于零时,价格显示会截断该值的美分部分,即我得到9.0而不是9.00。输入模式确保我必须输入9.00,但我无法弄清楚如何显示9.00

我确定我错过了一些明显的东西。如何在不截断的情况下显示价格?

2 个答案:

答案 0 :(得分:1)

"%.2f" % @book.purchase_price

将使用两位小数格式化变量。等价地,

sprintf("%.2f", @book.purchase_price)

文档:String#%Kernel#sprintf

答案 1 :(得分:0)

您可以尝试Money gem https://github.com/RubyMoney/money