#ruby
Обращался к англоязычному гуглу, набирая ruby triad но он мне выдает картинки с какой-то стриптизершей. Есть число (Integer), например 146234232. Как из него получить строку "146 234 232"?
Ответы
Ответ 1
def comma_numbers(number, delimiter = ',') number.to_s.reverse.gsub(%r{([0-9]{3}(?=([0-9])))}, "\\1#{delimiter}").reverse end number_to_currency(1234567890.506, locale: :fr)Ответ 2
i=146234232 i.pr.to_s.pr.split(/(.{1,3})/).pr.arEnd.pr.join(' ').pr # Данный код выполняется на моем компьютере, # как вы можете видеть на видео. # У вас этот код возможно не будет выполняться. # Так как необходимы дополнительные библиотеки. https://www.youtube.com/watch?v=QAA-5QZVNEsОтвет 3
Можно воспользоваться, например, регулярными выражениями: > 146234232.to_s.gsub(/([0-9]{3})/,'\1 ').strip => "146 234 232" Если строка не делится целиком на триады, то последняя группа будет неполной: > 1462342325.to_s.gsub(/([0-9]{3})/,'\1 ').strip => "146 234 232 5"Ответ 4
[ 1, 12, 123, 1234, 12345, 123456 ].each do |m| puts "%8s\t%8s" % [m, -m].map{ |n| n.to_s.reverse.scan(/\d\d?\d?-?/).join(" ").reverse } end 1 -1 12 -12 123 -123 1 234 -1 234 12 345 -12 345 123 456 -123 456Ответ 5
Я для разбиения цисла на триады обычно использую регулярное выражение /(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 'Ответ 6
Так же можно воспользоваться Enumerable методами 12345.to_s.split("").reverse.each_slice(3).to_a.map{|e| e.reverse.join("")}.reverse.join(" ")Ответ 7
def split(number, delimiter = ' ', group = 3) return '0' if number.zero? # вычисляем 10 в степени "group", по-умолчанию 1000 n = 10 ** group; parts = [] # пока число больше 0, сохраняем остаток деления на n и делим само число на n number = number.abs while number > 0 parts.unshift(number % n) number = (number / n).floor end parts.join(delimiter) end split(123456789) # "123 456 789" split(123456789, '-') # "123-456-789" split(123456789, '-', 2) # "1-23-45-67-89"
Комментариев нет:
Отправить комментарий