Форматирование поплавка до минимального количества знаков после запятой
Я сохраняю десятичное число в рельсах, и мне нужно отображать его как валюту как таковую:
11.1230 => "$11.123"
11.1000 => "$11.10"
11.0100 => "$11.01"
11.1234 => "$11.1234"
Любой простой способ сделать это?
Ответы
Ответ 1
Изменить: похоже, что это Rails 3, поскольку метод Rails 2 number_with_precision
не включает параметр strip_insignificant_zeros
:
Вы можете передать некоторые параметры number_to_currency
(стандартный помощник Rails):
number_to_currency(11.1230, :precision => 10, :strip_insignificant_zeros => true)
# => "$11.123"
Вам нужно предоставить точность, чтобы параметр strip_insignificant_zeros
работал, хотя в противном случае метод number_with_precision
никогда не будет вызван.
Ответ 2
Если вы хотите сохранить как float, вы можете использовать метод number_to_currency (value) в своих представлениях для печати того, что выглядит как $.
Исправьте меня, если я ошибаюсь (поскольку я редко обращался с валютой), но я считаю, что общепринятая мудрость заключается в том, чтобы хранить долларовые ценности как целые числа. Таким образом вам не придется иметь дело с фанк-плавающей математикой.
Ответ 3
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
Ответ 4
Итак, преобразуйте его в три цифры десятичной дроби, а затем удалите окончательный, если и только если он равен нулю.
s.sub(/0$/, '')