2010-10-19 3 views
24

Quelqu'un connaît la méthode de conversion des nombres numériques en mots numériques anglais dans des rails?Nombre de Rails de conversion de mots anglais

J'ai trouvé quelques scripts Ruby pour convertir des nombres en mots anglais pour les mots correspondants. Au lieu d'écrire un script en ruby, j'ai l'impression que la fonction directe est disponible.

Par exemple. 1 -> Un, 2 -> Deux.

Répondre

10

Non, vous devez écrire une fonction vous-même. La chose la plus proche de ce que vous voulez est number_to_human, mais cela ne convertit pas 1 en One.

Voici quelques URL qui peuvent être utiles:

+0

Vous connaissez un script disponible pour cela? –

+0

Non ... pourquoi n'utilisez-vous pas les scripts Ruby que vous avez trouvés? – Mischa

+1

J'ai trouvé quelques URL pour vous. Bonne chance. – Mischa

6

Il est toujours le humanize gem qui fait exactement ce que vous voulez ...

require 'humanize' 
23.humanize # => "twenty three" 
0.42.humanize(decimals_as: :digits) # => "zero point four two" 
+0

Pouvez-vous donner un exemple? Je ne peux pas le faire fonctionner. –

+2

@ p.matsinopoulos '1.humanize', mais vous devez d'abord' exiger 'humanize'' – Geoffroy

+3

Je reçois 'méthode indéfinie' humanize 'pour 1: Fixnum', ou' 1.to_s.humanize #> 1' – alexanderbird

3

Vous pouvez également utiliser la pierre précieuse to_words.

Cette variable convertit les entiers en mots.

par exemple.

1.to_words # one , 

100.to_words # one hundred , 

101.to_words # one hundred and one 

Il convertit également les nombres négatifs.

-1

Vous pouvez également vérifier bijou « » roupies - https://github.com/railsfactory-shiv/rupees pour convertir le nombre de roupies indiennes (par exemple dans Lakh, Crore, etc.)

+0

S'il vous plaît ne postez pas de lien seulement les réponses. Les liens peuvent disparaître. –

3

Comment cela? Écrit pour convertir des nombres en mots dans le système indien, mais peut être facilement modifié.

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 
Questions connexes