Форматирование числа с плавающей точкой до минимального количества десятичных разрядов - PullRequest
2 голосов
/ 11 мая 2011

Я храню десятичную дробь в рельсах, и мне нужно, чтобы она отображалась как валюта:

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

Есть ли простой способ сделать это?

Ответы [ 4 ]

5 голосов
/ 11 мая 2011

Edit: похоже, что это специфично для Rails 3, так как метод number_with_precision в Rails 2 не включает опцию 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 никогда не вызывается.

5 голосов
/ 11 мая 2011
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 голосов
/ 11 мая 2011

Если вы хотите сохранить как число с плавающей точкой, вы можете использовать метод number_to_currency (value) в ваших представлениях для печати чего-то, похожего на $.

Исправьте меня, если я ошибаюсь (так как яредко имеет дело с валютой), но я думаю, что общепринятым является хранение долларовых значений в виде целых чисел.Таким образом, вам не придется иметь дело с классной математикой.

0 голосов
/ 11 мая 2011

Итак, преобразуйте его в три десятичных дробных числа и затем удалите последнюю, если и только если это ноль.

s.sub(/0$/, '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...