Рельсы преобразования чисел в английские слова - PullRequest
26 голосов
/ 19 октября 2010

Кто-нибудь знает метод преобразования чисел в английские числовые слова в рельсах?

Я нашел несколько сценариев Ruby для преобразования числительных в английские слова для соответствующих слов.

Вместо написания скрипта на ruby, я чувствую, что прямая функция доступна.

Например.1 -> Один, 2 -> Два.

Ответы [ 6 ]

19 голосов
/ 24 марта 2012
10 голосов
/ 23 апреля 2014

Все еще есть гуманизированный камень , который делает именно то, что вы хотите ...

require 'humanize'
23.humanize # => "twenty three"
0.42.humanize(decimals_as: :digits) # => "zero point four two"
10 голосов
/ 19 октября 2010

Нет, вы должны написать функцию самостоятельно. Самое близкое к тому, что вы хотите, это number_to_human, но это не преобразует 1 в One.

Вот некоторые URL, которые могут быть полезны:

5 голосов
/ 24 декабря 2014

Вы также можете использовать камень to_words .

Этот самоцвет преобразует целые числа в слова.

, например

1.to_words # one ,

100.to_words # one hundred ,

101.to_words # one hundred and one

Он также преобразует отрицательные числа.

3 голосов
/ 20 апреля 2017

Как насчет этого? Написано для преобразования чисел в слова в индийской системе, но может быть легко изменено.

def to_words(num)
  numbers_to_name = {
      10000000 => "crore",
      100000 => "lakh",
      1000 => "thousand",
      100 => "hundred",
      90 => "ninety",
      80 => "eighty",
      70 => "seventy",
      60 => "sixty",
      50 => "fifty",
      40 => "forty",
      30 => "thirty",
      20 => "twenty",
      19=>"nineteen",
      18=>"eighteen",
      17=>"seventeen", 
      16=>"sixteen",
      15=>"fifteen",
      14=>"fourteen",
      13=>"thirteen",              
      12=>"twelve",
      11 => "eleven",
      10 => "ten",
      9 => "nine",
      8 => "eight",
      7 => "seven",
      6 => "six",
      5 => "five",
      4 => "four",
      3 => "three",
      2 => "two",
      1 => "one"
    }

  log_floors_to_ten_powers = {
    0 => 1,
    1 => 10,
    2 => 100,
    3 => 1000,
    4 => 1000,
    5 => 100000,
    6 => 100000,
    7 => 10000000
  }

  num = num.to_i
  return '' if num <= 0 or num >= 100000000

  log_floor = Math.log(num, 10).floor
  ten_power = log_floors_to_ten_powers[log_floor]

  if num <= 20
    numbers_to_name[num]
  elsif log_floor == 1
    rem = num % 10
    [ numbers_to_name[num - rem], to_words(rem) ].join(' ')
  else
    [ to_words(num / ten_power), numbers_to_name[ten_power], to_words(num % ten_power) ].join(' ')
  end
end
0 голосов
/ 14 июля 2016

Вы также можете выбрать гем 'rupees' - https://github.com/railsfactory-shiv/rupees для преобразования чисел в индийские рупии (например, в Lakh, Crore и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...