我有一个生成发票的应用程序。该系统使用三种货币:磅,美元和欧元。作为要求的一部分,发票必须以英文单词显示总金额。数字(货币)换成英文单词
例如:
£100.50 - 一百磅和五十便士。
$ 100.50 - 一百美元和五十美分。
€100.50 - 一百欧元和五十美分。
我发现从2010年开始this,但它并没有真正解决我的问题。 我想知道什么是将数字转换为包括货币在内的单词的最佳方式。
我想找到一个宝石来帮助我在这个问题上,但我可以找到...
任何建议是非常受欢迎的。
我有一个生成发票的应用程序。该系统使用三种货币:磅,美元和欧元。作为要求的一部分,发票必须以英文单词显示总金额。数字(货币)换成英文单词
例如:
£100.50 - 一百磅和五十便士。
$ 100.50 - 一百美元和五十美分。
€100.50 - 一百欧元和五十美分。
我发现从2010年开始this,但它并没有真正解决我的问题。 我想知道什么是将数字转换为包括货币在内的单词的最佳方式。
我想找到一个宝石来帮助我在这个问题上,但我可以找到...
任何建议是非常受欢迎的。
您链接的帖子提到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一个好处是,它也可以处理单数/复数了你,当你只有你的主要/次要单位,如之一。 :
"penny".en.plural
# => "pence"
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"
嘿西蒙......非常感谢......我终于在你的回答中实现了我所需要的。 – gabrielhilal