Удалите ведущий ноль, используя number_with_precision - PullRequest
0 голосов
/ 05 января 2012

У меня есть приложение, которое отслеживает статистику бейсбола игрока. Я хочу, чтобы он показывал средний уровень без начального нуля ( .333 вместо 0.333 ). Я безуспешно пробовал number_with_precision.

Вот строка из моего представления:

<%= number_with_precision(@player.batting_average, :precision => 3, 
    :significant => true, :strip_insignificant_zeros => true) %>

Вот код из модели:

def batting_average
  self.hits / self.at_bats.to_f
end

На основе документации number_with_precision Rails 3.1.3: strip_insignificant_zeros применяется только к нулям после десятичной дроби и: значимая не влияет на десятичные дроби. Я что-то упустил?

Ответы [ 3 ]

1 голос
/ 05 января 2012

Существует множество способов сделать это, но главное, чтобы вы знали, что вы имеете дело с float и вам нужно будет преобразовать его в строку, чтобы использовать такие вещи, как gsub и [].

Вот несколько идей:

def to_ba
  self.to_s[1..-1]
end

или с gsub

def to_ba
  self.to_s.gsub(/^0+/, '')
end

или если вы хотите сойти с ума (а это больше для развлечения, чем для чего-либо еще):

def to_ba
  self.to_s.reverse.chop.reverse
end

Это все вспомогательные методы, которые могут быть добавлены в конце вашего значения, например:

number_with_precision( stuff ).to_ba

или вы можете просто присоединить любой из этих методов к концу вашего вызова следующим образом:

number_with_precision( stuff ).to_s[1..-1]

Но я бы использовал помощника , если вы планируете ставить средние значения ватина повсюду.

1 голос
/ 05 января 2012

Нет.Это правильное поведение.Вы можете написать помощника, который сделает это правильно или просто добавить gsub(/^0+/,'').

0 голосов
/ 05 января 2012

http://www.ruby -forum.com / topic / 136990

def trim_lead(n)
    self.gsub!(/^#{n}+/,'')
end
...