Все ответы, кроме одного, используют n.to_s
. @ MrMorphe's нет, но он создает массив, который будет join
ed. Вот способ, который не использует ни Fixnum # to_s , ни Array # join .
def separate(n,c=' ')
m = n
str = ''
loop do
m,r = m.divmod(1000)
return str.insert(0,"#{r}") if m.zero?
str.insert(0,"#{c}#{"%03d" % r}")
end
end
separate(1) #=> "1"
separate(12) #=> "12"
separate(123) #=> "123"
separate(1234) #=> "1 234"
separate(12045) #=> "12 045"
separate(123456) #=> "123 456"
separate(1234000) #=> "1 234 000"
Хм. Эта колонка справа наклонена?
Другой способ, который использует to_s
, но не join
:
def separate(n, c=' ')
str = n.to_s
sz = str.size
(3...sz).step(3) { |i| str.insert(sz-i, c) }
str
end