leo*_*nel 16 ruby ruby-on-rails
可能重复:
Rails 3.如何以编辑形式显示两个小数位?
我知道我可以使用sprintf来限制小数点后两位.
当我在表格中或表格中重新显示价格时,有时候我会得到80而不是80.00.从价格输入数据库的那一刻起,只用两位小数存储价格会不会更好?这样,无论何时显示,它总是会显示两位小数.如果是这样,怎么样?
Ank*_*oni 36
您只需x.round(2)
在显示数字时使用- 它将始终显示两位小数.通常建议在后端数据库中将价格存储为整数,因为当您需要非常高的精度时,它们会得到更好的处理.在这种情况下,你可以选择任何一种方式.
Jor*_*ing 21
如果它是一个:float
或者:decimal
,80
并且80.00
在Ruby中将是相同的东西(将如此80.0000
).后者没有"存储"更多小数位,并且尾随零只在视图中有意义.你可以sprintf
像你说的那样使用,或者你可以使用Rails的方便number_with_precision
助手:
<%= number_with_precision price, :precision => 2 %>
Run Code Online (Sandbox Code Playgroud)
顺便提一下,这是关于这个主题的另一个问题.@Matthew Rudy对一件事是正确的:对于您应该使用的金钱栏目:decimal
.
如果你真的致力于在你的视图中没有这个,你可以使用像Draper这样的东西将装饰器应用到你的属性中(这只会将你的number_with_precision
调用移到一个新的Decorator类中),但它可能有点过分了.这个例子.
Mat*_*udy 10
您应该尝试使用:decimal
数据库字段的类型,:scale
设置为2
将十进制列添加到新表中;
create_table :my_table do |t|
t.decimal :my_column, :scale => 2
end
Run Code Online (Sandbox Code Playgroud)
要将列添加到现有表;
add_column :my_table, :my_column, :decimal, :scale => 2
Run Code Online (Sandbox Code Playgroud)
由于某些数据库没有精确默认值,因此精确定位是明智的.比如postgresql:
add_column :my_table, my_column, precision: 30, scale: 2
Run Code Online (Sandbox Code Playgroud)
小智 7
为此,我使用number_to_currency格式化程序.由于我在美国,默认设置对我来说很好.
<% price = 45.9999 %>
<price><%= number_to_currency(price)%></price>
=> <price>$45.99</price>
Run Code Online (Sandbox Code Playgroud)
如果默认值不适合您,您也可以传入选项.有关api.rubyonrails.org上可用选项的文档
归档时间: |
|
查看次数: |
39240 次 |
最近记录: |