Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Как задать двузначный формат числа для переменной в Ruby?

#ruby


Вот пример кода:
for x in 1..79
puts "reg#{x}"
 for y in 1..20
 puts "reg#{x}-#{y}"
 end
x = x + 1
end

Переменные x и y в нём - числа, поэтому результат выглядит так:
reg1-1
...
reg79-1
...
Я бы хотел получить результат в виде "reg01-01 ... reg79-01..." и т. д.
Вопрос: можно ли сделать это, например, заранее задав тип переменной (если такой
тип существует)? Или нумерация вида 01, 02, 03 - это всегда будет string и арифметических
действий с ней не проделать?
Вариант с костылём в виде условия, добавляющего 0 куда надо, хочу обдумывать в последнюю
очередь.    


Ответы

Ответ 1



Во-первых x = x + 1 эта строчка не нужна, x и так проходит по 1..79 с интервалом в единицу. Во-вторых такой код принято писать так: (1..79).each do |x| puts "reg#{x}" (1..20).each do |y| puts "reg#{x}-#{y}" end end Ну а собственно вывести число с нулями спереди можно так: x.to_s.rjust(2, '0') где 2 -- длина числа в символах. Т.е. (1..79).each do |x| x_str = x.to_s.rjust(2, '0') puts "reg#{x_str}" (1..20).each do |y| y_str = y.to_s.rjust(2, '0') puts "reg#{x_str}-#{y_str}" end end

Ответ 2



a=[] (1..79).each do |v| (1..20).each do |v2| a<<'reg'+sprintf('%02d', v)+'-'+sprintf('%02d', v2) end end puts a https://www.youtube.com/watch?v=f5mR02LV7qs

Ответ 3



Класс String имеет метод %, реализующий классический printf: 1.upto 79 do |x| puts "reg%02d" % x 1.upto 20 do |y| puts "reg%02d-%02d" % [x, y] end end

Комментариев нет:

Отправить комментарий