如何在Rails中按照印度数字系统拆分数字?

3

我在Ruby on Rails中使用了number_with_delimiter方法给发票中的数字加逗号。但是结果的数字格式为23,324,455而不是印度卢比格式2,33,24,455

<%= number_with_precision(@number, :precision => 2, :delimiter => ',') %>

我需要生成以印度卢比(Rupees)为单位的发票,格式应为xx,xx,xxx.00。在Rails中是否可能实现?如何完成这个功能?

使用JavaScript可以完成此操作,但问题是我使用PDFKit gem生成了PDF格式的发票文件,该文件不支持JavaScript。我已经在文档加载时使用了所需的js代码。

$(document).ready(function(){
  $('.totalvalue').each(function(){
    value = $('.totalvalue').text();
    $('.totalvalue').html(
      (value+"").split("").reverse().join("").replace(/(\d{3})(?=\d)/g,        '$1,').split("").reverse().join("")
    )
  })
})

感谢@stefan编辑问题。 - Nandy
2个回答

5
你可以使用 money gem,并特别探索其格式化选项
Money.new(10000000, "INR").format(:symbol => false, 
                                  :south_asian_number_formatting => true)    
#=> "1,00,000.00"

这个程序运行良好,但正如您所提到的,当金额为10000000时,它会显示1,00,000.00,但我期望的是1,00,00,000.00。而且,当它有小数点,比如123456.5时,它会显示1,234.56而不是1,23,456.50。 - Nandy
2
@Nandy 这个宝石使用的是 paise,所以值应该用 paise 来指定,而不是卢比。根据文档,"以整数形式表示货币值,以分为单位。这样可以避免浮点数舍入误差。" - Wand Maker

2

不够优雅,但能正常工作:

("%.2f" % 23324455).reverse.gsub(/(?<=.{6})(\d\d?)/, ',\1').reverse
# => "2,33,24,455.00"

3
你能加一些说明吗?这个工作原理并不明显。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接