2016-06-29 2 views
0

Есть ли простая вспомогательная функция Rails/Ruby, которая поможет вам преобразовать читаемые человеком числа в реальные цифры?Как преобразовать читаемый человеком номер в фактическое число в Ruby?

Такие, как:

1K => 1000 

2M => 2,000,000 

2.2K => 2200 

1,500 => 1500 

50 => 50 

5.5M => 5500000 
+0

Как насчёт того, чтобы преобразование его самостоятельно? 'K = 10^3',' M = 10^6' и т. Д. Если нет суффикса, просто напечатайте номер else, умножьте его на эквивалентное значение и распечатайте. – Shravan40

+1

'2,000,000' не является действительным рубином' Numeric'. – mudasobwa

ответ

4
test = { 
    '1K' => 1000, 
    '2M' => 2000000, 
    '2.2K' => 2200, 
    '1,500' => 1500, 
    '50' => 50, 
    '5.5M' => 5500000 
} 

class String 
    def human_readable_to_i 
    multiplier = {'K' => 1_000, 'M' => 1_000_000}[self.upcase[/[KM](?=\z)/]] || 1 
    value = self.gsub(/[^\d.]/, '') 
    case value.count('.') 
    when 0 then value.to_i 
    when 1 then value.to_f 
    else 0 
    end * multiplier 
    end 
end 

test.each { |k, v| raise "Test failed" unless k.human_readable_to_i == v } 
0

Попробуйте что-то вроде этого, если у вас есть массив считываемых чисел человека, чем

array.map do |elem| 
    elem = elem.gsub('$','') 
    if elem.include? 'B' 
     elem.to_f * 1000000000 
    elsif elem.include? 'M' 
     elem.to_f * 1000000 
    elsif elem.include? 'K' 
     elem.to_f * 1000 
    else 
     elem.to_f 
    end 
end 

Посмотрите здесь, как хорошо, вы найдете много номеров хелперов

NumberHelper Rails.

Ruby Array human readable to actual

+0

'elem = elem.gsub ('$', '')' :: да, в мире нет валют, кроме доллара США. – mudasobwa

Смежные вопросы