Как разделить число по индийской системе нумерации в Rails?

Я использовал метод number_with_delimiter для добавления запятых для чисел в счете в Ruby on Rails. Но числовой формат привел к 23,324,455, а не к 2,33,24,455, то есть формату индийских рупий.

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

Мне нужно создать счет-фактуру с суммой в рупиях, поэтому формат должен быть xx,xx,xxx.00. Возможно ли это в Rails? Как это сделать?

Это можно сделать с помощью JavaScript, но проблема в том, что я сгенерировал счет в формате PDF с помощью драгоценного камня PDFKit, который не отвечает с помощью 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("")
    )
  })
})

person Nandy    schedule 27.05.2016    source источник
comment
Спасибо @stefan за редактирование вопроса.   -  person Nandy    schedule 31.05.2016


Ответы (2)


Вы можете использовать гем money и специально изучить его параметры форматирования.

Money.new(10000000, "INR").format(:symbol => false, 
                                  :south_asian_number_formatting => true)    
#=> "1,00,000.00"
person Wand Maker    schedule 27.05.2016
comment
это работает нормально, но, как вы упомянули, когда сумма равна 10000000, она дает 1 00 000,00, но я ожидаю, что это 1 00 00 000,00, а также когда у нее есть десятичная точка, например 123456,5, она дает 1 234,56 вместо 1 23 456,50 - person Nandy; 27.05.2016
comment
@Nandy Этот драгоценный камень работает с пайсами, поэтому стоимость должна быть указана в пайсах, а не в рупиях. Согласно документации, Represents monetary values as integers, in cents. This avoids floating point rounding errors. - person Wand Maker; 27.05.2016

Не элегантно, но работает:

("%.2f" % 23324455).reverse.gsub(/(?<=.{6})(\d\d?)/, ',\1').reverse
# => "2,33,24,455.00"
person Amadan    schedule 27.05.2016
comment
Не могли бы вы добавить некоторые пояснения? Не очевидно, как это работает. - person Stefan; 27.05.2016