Если вы говорите об американской валюте, в том числе:
- запятые каждые три цифры слева от десятичной точки
- не более двух цифр справа от десятичной точки
- не показывать десятичную точку, если есть ноль центов
попробуйте это
sprintf('%.2f',num).gsub('.00','').reverse.scan(/(\d*\.\d{1,3}|\d{1,3})/).join(',').reverse
, который генерирует следующее в отладчике:
vals = [123.01, 1234.006, 12, 1234567, 12345678.1,1.001]
vals.map{|num| sprintf('%.2f',num).gsub('.00','').reverse.scan(/(\d*\.\d{1,3}|\d{1,3})/).join(',').reverse
}
=> ["123.01", "1 234.01", "12", "1 234 567", "12 345 678,10", "1"]
Его можно настроить для некоторых европейских форматов, отредактировав строку соединения, но я не очень разбираюсь в европейских соглашениях.