首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby语言宝石

Ruby语言宝石
EN

Stack Overflow用户
提问于 2009-12-18 21:01:53
回答 3查看 1.4K关注 0票数 0

我尝试将数字转换为单词,但我遇到了一个问题:

代码语言:javascript
复制
>> (91.80).en.numwords
=> "ninety-one point eight"

我希望是“91.80”。我用的是语言学的gem。你知道解决这个问题的方法吗(最好是使用语言学)。

EN

回答 3

Stack Overflow用户

发布于 2009-12-18 21:18:58

它有点老土,但它是有效的:

代码语言:javascript
复制
'91.80'.split('.').map {|i| i.en.numwords}.join(' point ')
=> "ninety-one point eighty"

当你把91.80作为一个浮点型时,ruby去掉了尾随的零,所以它需要从字符串开始才能保留信息。一个更好的例子可能是:

代码语言:javascript
复制
'91.83'.split('.').map {|i| i.en.numwords}.join(' point ')
 => "ninety-one point eighty-three"
票数 4
EN

Stack Overflow用户

发布于 2011-02-25 00:05:44

如果您在Ruby1.9中使用Linguistics gem,则需要为en.rb的1060行打补丁

代码语言:javascript
复制
# Ruby 1.8 -->  fn = NumberToWordsFunctions[ digits.nitems ]
# Ruby 1.9 removed Array.nitems so we get -->  fn = NumberToWordsFunctions[ digits.count{|x| !x.nil?} ]
fn = NumberToWordsFunctions[ digits.count{|x| !x.nil?} ]

我们把这个小补丁提交给了作者。

票数 1
EN

Stack Overflow用户

发布于 2009-12-18 22:18:48

我自己得到了答案。

代码语言:javascript
复制
def amount_to_words(number)
  unless (number % 1).zero?
    number = number.abs if number < 0
    div = number.div(1)                      
    mod = (number.modulo(1) * 100).round    
    [div.to_s.en.numwords, "point", mod.to_s.en.numwords].join(" ")
  else
    number.en.numwords
  end
end

和结果:

代码语言:javascript
复制
>> amount_to_words(-91.83)
=> "ninety-one point eighty-three"
>> amount_to_words(-91.8)
=> "ninety-one point eighty"
>> amount_to_words(91.8)
=> "ninety-one point eighty"
>> amount_to_words(91.83)
=> "ninety-one point eighty-three"

不过,谢谢你们。你和to_s的想法对我很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1928080

复制
相关文章

相似问题

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