module Digit2persian

Constants

VERSION

Public Instance Methods

convert_one_digit(str) click to toggle source
# File lib/digit2persian.rb, line 4
def convert_one_digit(str)
  l_one = {
      "1" => "یک",
      "2" => "دو",
      "3" => "سه",
      "4" => "چهار",
      "5" => "پنج",
      "6" => "شش",
      "7" => "هفت",
      "8" => "هشت",
      "9" => "نه"
  }
    return l_one[str]
end
convert_three_digits(str) click to toggle source
# File lib/digit2persian.rb, line 63
def convert_three_digits(str)


  l_three = {
      "100" => "صد",
      "200" => "دویست",
      "300" => "سیصد",
      "400" => "چهارصد",
      "500" => "پانصد",
      "600" => "ششصد",
      "700" => "هفتصد",
      "800" => "هشتصد",
      "900" => "نهصد"
  }

    if l_three["#{str}"]
        return l_three["#{str}"]
    else
        l_three.each do |l|
            b = str.to_i - l[0].to_i
            if (b < 100)
                return l[1] + " و " + digits_to_text(b.to_s)
            end
        end
    end
end
convert_two_digits(str) click to toggle source
# File lib/digit2persian.rb, line 20
def convert_two_digits(str)


  l_two_one = {
      "10" => "ده",
      "11" => "یازده",
      "12" => "دوازده",
      "13" => "سیزده",
      "14" => "چهارده",
      "15" => "پانزده",
      "16" => "شانزده",
      "17" => "هفده",
      "18" => "هجده",
      "19" => "نوزده"
  }
  l_two_two = {

      "20" => "بیست",
      "30" => "سی",
      "40" => "چهل",
      "50" => "پنجاه",
      "60" => "شصت",
      "70" => "هفتاد",
      "80" => "هشتاد",
      "90" => "نود"
  }


    if l_two_one["#{str}"]
        return l_two_one["#{str}"]
    elsif l_two_two["#{str}"]
        return l_two_two["#{str}"]
    else
        l_two_two.each do |l|
            b = str.to_i - l[0].to_i
            if (b < 10)
              return l[1] + " و " + digits_to_text(b.to_s)
            end
        end
    end
end
dic_num(n) click to toggle source
# File lib/digit2persian.rb, line 91
def dic_num(n)
  l_one = {
      "1" => "یک",
      "2" => "دو",
      "3" => "سه",
      "4" => "چهار",
      "5" => "پنج",
      "6" => "شش",
      "7" => "هفت",
      "8" => "هشت",
      "9" => "نه"
  }

  l_two_one = {
      "10" => "ده",
      "11" => "یازده",
      "12" => "دوازده",
      "13" => "سیزده",
      "14" => "چهارده",
      "15" => "پانزده",
      "16" => "شانزده",
      "17" => "هفده",
      "18" => "هجده",
      "19" => "نوزده"
  }
  l_two_two = {

      "20" => "بیست",
      "30" => "سی",
      "40" => "چهل",
      "50" => "پنجاه",
      "60" => "شصت",
      "70" => "هفتاد",
      "80" => "هشتاد",
      "90" => "نود"
  }

  l_three = {
      "100" => "صد",
      "200" => "دویست",
      "300" => "سیصد",
      "400" => "چهارصد",
      "500" => "پانصد",
      "600" => "ششصد",
      "700" => "هفتصد",
      "800" => "هشتصد",
      "900" => "نهصد"
  }
  l_four = {
      "1000" => "هزار"
  }
  l_six = {
      "1000000" => "میلیون"
  }
  l_nine = {
      "1000000000" => "میلیارد"
  }
  num_dic = {
      1 => [l_one],
      2 => [l_two_two, l_two_one],
      3 => [l_three],
      4 => [l_four],
      7 => [l_six],
      10 => [l_nine]
  }
    if num_dic[n]
        return num_dic[n]
    else
        if (not num_dic[n])
            n -= 1
            return dic_num(n)
        end
    end
end
digits_to_text(str) click to toggle source
# File lib/digit2persian.rb, line 167
def digits_to_text(str)
  l_one = {
      "1" => "یک",
      "2" => "دو",
      "3" => "سه",
      "4" => "چهار",
      "5" => "پنج",
      "6" => "شش",
      "7" => "هفت",
      "8" => "هشت",
      "9" => "نه"
  }

    s = str.to_i.to_s
    if s.length == 1
        return convert_one_digit(s)
    elsif s.length == 2
        return convert_two_digits(s)
    elsif s.length == 3
        return convert_three_digits(s)
    else
        n = s.length
        d = dic_num(n)
        d.each do |item|
            if item["#{s}"]
              return num_dic[1][0]["1"] + item["#{s}"]
            else
                d = d[0]
                k = (d.keys[0]).to_i
                d = [k, (d[d.keys[0]]).to_s]
                s = s.to_i
                if (s - k) < d[0]
                    return l_one["1"] + " " + d[1] + " و " + digits_to_text((s % k).to_s)
                else
                    b = s % k
                    if b == 0
                        return digits_to_text((s/k).to_s) + " " + d[1]
                    end
                    return digits_to_text((s/k).to_s) + " " + d[1] + " و " + digits_to_text(b.to_s)
                end
            end
        end
    end
end