2010-10-19 39 views
24

Bất kỳ ai biết phương pháp chuyển đổi các số sang từ số tiếng Anh trong đường ray?Số sang Rails chuyển đổi từ tiếng Anh

Tôi đã tìm thấy một số tập lệnh Ruby để chuyển đổi số thành từ tiếng Anh cho các từ tương ứng.

Thay vì viết kịch bản bằng ruby, tôi cảm thấy rằng chức năng trực tiếp khả dụng.

Ví dụ: 1 -> Một, 2 -> Hai.

Trả lời

10

Không, bạn phải tự viết một hàm. Điều gần nhất với những gì bạn muốn là number_to_human, nhưng điều đó không chuyển đổi 1 thành One.

Dưới đây là một số URL có thể hữu ích:

+0

Bạn biết bất kỳ tập lệnh có sẵn nào cho điều đó không? –

+0

Không ... tại sao bạn không sử dụng các tập lệnh Ruby mà bạn tìm thấy? – Mischa

+1

Tôi đã tìm thấy một vài URL cho bạn. Chúc may mắn. – Mischa

6

Vẫn là humanize gem thực hiện chính xác những gì bạn muốn ...

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

Bạn có thể đưa ra một ví dụ không? Tôi không thể làm cho nó hoạt động được. –

+2

@ p.matsinopoulos '1.humanize', nhưng trước tiên bạn cần' require 'humanize'' – Geoffroy

+3

Tôi nhận được 'phương thức undefined' humanize 'cho 1: Fixnum', hoặc' 1.to_s.humanize #> 1' – alexanderbird

3

Bạn cũng có thể sử dụng đá quý to_words.

Đá quý này chuyển đổi số nguyên thành các từ.

ví dụ:

1.to_words # one , 

100.to_words # one hundred , 

101.to_words # one hundred and one 

Nó cũng chuyển đổi số âm.

-1

Bạn cũng có thể muốn kiểm tra đá quý 'rupee' - https://github.com/railsfactory-shiv/rupees để chuyển đổi số để rupee Ấn Độ (ví dụ trong lakh, Crore, vv)

+0

Vui lòng không đăng câu trả lời chỉ cho liên kết. Liên kết có thể biến mất. –

3

Làm thế nào về điều này? Được viết để chuyển đổi các số thành các từ trong hệ thống Ấn Độ, nhưng có thể dễ dàng sửa đổi.

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 
Các vấn đề liên quan