Ruby on rails 将浮点设置为最小小数位数

Ruby on rails 将浮点设置为最小小数位数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在rails中存储一个十进制数,需要将其显示为货币: 11.1230 => "$11.123" 11.1000 => "$11.10" 11.0100 => "$11.01" 11.1234 => "$11.1234" 有什么简单的方法可以做到这一点吗?如果您想以浮点形式存储,您可以在视图中使用number\u to\u currency(value)方法来打印看起来像$的内容 如果我错了,请纠正我(因为我很少涉及货币),但我认为传统智慧是将美元值存储为整数。这样,

我正在rails中存储一个十进制数,需要将其显示为货币:

11.1230 => "$11.123"
11.1000 => "$11.10"
11.0100 => "$11.01"
11.1234 => "$11.1234"

有什么简单的方法可以做到这一点吗?

如果您想以浮点形式存储,您可以在视图中使用number\u to\u currency(value)方法来打印看起来像$的内容


如果我错了,请纠正我(因为我很少涉及货币),但我认为传统智慧是将美元值存储为整数。这样,您就不必处理时髦的浮点运算了。

编辑:看起来这是Rails 3特有的,因为Rails 2的
带精度的数字方法不包括
带零选项:

您可以将一些选项传递给
number\u to\u currency
(标准Rails帮助程序):

您需要提供一个精度,才能使
带零
选项正常工作,否则根本不会调用带精度的
数字
方法。

def pad\u数字(数字,最小小数=2)
def pad_number( number, min_decimals=2 )
  s = "%g" % number
  decimals = (s[/\.(\d+)/,1] || "").length
  s << "." if decimals == 0
  s << "0"*[0,min_decimals-decimals].max
end
puts [ 11.123, 11.1, 11.01, 11.1234, 11 ].map{ |n| pad_number(n) }
#=> 11.123
#=> 11.10
#=> 11.01
#=> 11.1234
#=> 11.00
s=“%g”%number 小数=(s[/\.(\d+/,1]| |“”).length s 11.10 #=> 11.01 #=> 11.1234 #=> 11.00
因此,将其转换为三个小数位数,然后删除最后一个小数位数,当且仅当其为零时

s.sub(/0$/, '')

当我运行它时,我实际上得到了11.1230000000美元example@dmarkow我看不到中的
去掉零值
选项。@Jake,如果你想减少零值,你需要降低
:精度。这些0是有效数字,因此它们不会被抛出:@Phrogz:没有文档记录,但如果指定精度,它会将所有选项传递到具有精度的数字_中(该选项支持带零选项)。(至少在Rails 3中)@Austin:我很确定,如果数字允许的话,他希望显示的小数点不只是两位。我只是选择了一个任意的“高”数字。是的,将值存储为整数,以美分或任何最小的货币值为单位,以避免舍入错误。最后一步是调整所需的美元金额,除以100,将其返回到正常的$0.00格式。我认为最佳做法是使用十进制——没有舍入问题,显示工作量也更少。请看:我认为您的规则可能需要澄清。它是否“至少两位小数,但必要时更多”?这不符合OP的测试用例
11.1234=>“11.1234”
实际上是唯一符合OP问题的答案<代码>11.10
s.sub(/0$/, '')