2010-10-19 18 views
24

¿Alguien sabe el método para convertir los números a palabras en números en inglés en los rieles?Número en Inglés Raíles de Conversión de Palabras

Encontré algunos scripts de Ruby para convertir números en palabras en inglés para las palabras correspondientes.

En lugar de escribir un guión en ruby, creo que la función directa está disponible.

Por ejemplo. 1 -> Uno, 2 -> Dos.

Respuesta

10

No, usted tiene que escribir una función usted mismo. Lo más parecido a lo que quiere es number_to_human, pero eso no convierte 1 en One.

Estas son algunas de las URL que pueden ser útiles:

+0

¿Conoces algún script disponible para eso? –

+0

No ... ¿por qué no utilizas los scripts de Ruby que encontraste? – Mischa

+1

Encontré algunas URL para usted. Buena suerte. – Mischa

6

todavía existe la humanize gem que hace exactamente lo que quiere ...

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

¿Puedes dar un ejemplo? No puedo hacer que funcione. –

+2

@ p.matsinopoulos '1.humanize', pero primero necesita' requerir 'humanize'' – Geoffroy

+3

obtengo 'método indefinido' humanize 'para 1: Fixnum', o' 1.to_s.humanize #> 1' – alexanderbird

3

También puede utilizar la gema to_words.

Esta gema convierte números enteros en palabras.

p. Ej.

1.to_words # one , 

100.to_words # one hundred , 

101.to_words # one hundred and one 

También convierte números negativos.

-1

También es posible que desee comprobar Gem '' rupias - https://github.com/railsfactory-shiv/rupees para convertir los números de rupias indias (por ejemplo, en lakh, Crore, etc)

+0

No publique solo las respuestas del enlace. Los enlaces pueden desaparecer –

3

¿Qué tal esto? Escrito para convertir números a palabras en el sistema indio, pero puede modificarse fácilmente.

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 
Cuestiones relacionadas