0

請求書を生成するアプリケーションがあります。このシステムは、ポンド、米ドル、ユーロの3つの通貨で機能します。要件の一部として、請求書には合計金額を英語で表示する必要があります。

例:
£100.50-100ポンドと50ペンス。
$100.50-100米ドルと50セント。
100.50ユーロ-100ユーロと50セント。

私は2010年からこの投稿を見つけましたが、それは私の問題を実際には解決しません。数字を通貨を含む単語に変換する最良の方法を知りたいのですが。
私はこの問題で私を助けるために宝石を見つけようとしています、しかし私は見つけることができました...
どんな提案でも大歓迎です。

4

2 に答える 2

2

リンクした投稿にはlinguistics.gemが記載されています-数値を変換できるため、メジャーユニットとマイナーユニット(つまり、ドルとセント/ポンドとペンス)を分割し、それぞれを処理してから、文字列に再結合するだけです。メジャーユニット名とマイナーユニット名、つまり

majorUnit.en.numwords dollars [and minorUnit.en.numwords cents]
...
puts 100.en.numwords + " dollars and " + 50.en.numwords + " cents"
# => 100 dollars and fifty cents

linguistics.gemの利点は、メジャー/マイナーユニットが1つしかない場合に、単数形/複数形を処理できることです。例:

"penny".en.plural
# => "pence"
于 2012-05-29T00:51:05.423 に答える
0
def self.subhundred number
  ones = %w{zero one two three four five six seven eight nine
        ten eleven twelve thirteen fourteen fifteen
        sixteen seventeen eighteen nineteen}
  tens = %w{zero ten twenty thirty fourty fifty sixty seventy eighty ninety}

  subhundred = number % 100
  return [ones[subhundred]] if subhundred < 20
  return [tens[subhundred / 10], ones[subhundred % 10]]
end

def self.subthousand number
      hundreds = (number % 1000) / 100
      tens = number % 100
      s = []
      s = subhundred(hundreds) + ["hundred"] unless hundreds == 0
      s = s + ["and"] if hundreds == 0 or tens == 0
      s = s + [subhundred(tens)] unless tens == 0
      s
end

def self.decimals number
          return [] unless number.to_s['.']
          number = number.to_s.split('.')[1]  
          puts "num ---#{number}"
          digits =  subhundred number.to_i if number.to_i > 0
          #digits.present? ? ["and"] + digits + ['cents'] : []
           digits.present? ? ["and"] +  ['cents']  + digits : []  
end
def self.words_from_numbers number
          steps = [""] + %w{thousand million billion trillion quadrillion quintillion sextillion}
          result = []
          n = number.to_i
          steps.each do |step|
            x = n % 1000
            unit = (step == "") ? [] : [step]
            result = subthousand(x) + unit  + result unless x == 0
            n = n / 1000
          end
          result = ["zero"] if result.empty?
          result = result + decimals(number)

          result.join(' ').gsub('zero','').strip
end

 OutPut :  

  puts words_from_numbers(440100) => " US DOLLARS FOUR HUNDRED  FOURTY  THOUSAND AND ONE HUNDRED ONLY"
于 2016-01-19T04:06:48.690 に答える