首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数字(货币)转换成英文单词

将数字(货币)转换成英文单词
EN

Stack Overflow用户
提问于 2012-05-29 08:24:23
回答 2查看 2.3K关注 0票数 0

我有一个生成发票的应用程序。该系统支持三种货币:英镑、美元和欧元。作为要求的一部分,发票必须以英文单词显示总金额。

例如:

£100.50 -100磅50便士。

100.50美元--100美元50美分。

100.50欧元-100欧元50美分。

我找到了2010年的this帖子,但它并没有真正解决我的问题。我想知道将数字转换成包括货币在内的单词的最好方法是什么。

在这件事上,我想找个办法帮我,但我能找到……

任何建议都非常受欢迎。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-29 08:51:05

您链接的帖子提到了linguistics.gem -因为它可以为您转换数字,所以您需要做的就是拆分出主要单位和次要单位(即美元和美分/英镑和便士),处理每个单位,然后重新组合为包含主要单位和次要单位名称的字符串。

代码语言:javascript
复制
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的一个好处是,当你只有一个主要/次要单位时,它还可以为你处理单数/复数,例如:

代码语言:javascript
复制
"penny".en.plural
# => "pence"
票数 2
EN

Stack Overflow用户

发布于 2016-01-19 12:06:49

代码语言:javascript
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10791752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档