71

さらに、ゼロで埋められた文字列としてフォーマットするにはどうすればよいですか?

4

23 に答える 23

91

式「10 の 10 乗」の結果を使用して数値呼び出し rand を生成するには

rand(10 ** 10)

数値をゼロで埋めるには、文字列形式演算子を使用できます

'%010d' % rand(10 ** 10)

またはrjust文字列のメソッド

rand(10 ** 10).to_s.rjust(10,'0')  
于 2008-08-29T16:13:42.050 に答える
63

おそらく私が知っている最も簡単な解決策を提供したいと思います。これは非常に優れたトリックです。

rand.to_s[2..11] 
 => "5950281724"
于 2013-08-10T11:12:35.620 に答える
34

これは、10 サイズの数字の文字列を生成する高速な方法です。

10.times.map{rand(10)}.join # => "3401487670"
于 2016-03-03T23:23:04.357 に答える
17

最も簡単な答えはおそらく

rand(1e9...1e10).to_i

とは実際にはフロートであるため、このto_i部分が必要です。1e91e10

irb(main)> 1e9.class
=> Float
于 2015-06-25T07:24:46.243 に答える
7

Ruby Community Style Guideに記載されているように、言及されていないという理由だけで、Kernel#sprintfメソッド (またはPowerpack ライブラリKernel#formatのエイリアス) は一般的にメソッドよりも優先されます。String#%

もちろん、これには非常に議論の余地がありますが、洞察を提供するために:

@quackingduckの答えの構文は次のようになります

# considered bad
'%010d' % rand(10**10)

# considered good
sprintf('%010d', rand(10**10))

この設定の性質は、主に の不可解な性質によるものです%。それ自体はあまりセマンティックではなく、追加のコンテキストがないと%モジュロ演算子と混同される可能性があります。

スタイル ガイドの例:

# bad
'%d %d' % [20, 10]
# => '20 10'

# good
sprintf('%d %d', 20, 10)
# => '20 10'

# good
sprintf('%{first} %{second}', first: 20, second: 10)
# => '20 10'

format('%d %d', 20, 10)
# => '20 10'

# good
format('%{first} %{second}', first: 20, second: 10)
# => '20 10'

を正当化するためにString#%、私は個人的に、コマンドの代わりに演算子のような構文を使用するのが本当に好きyour_array << 'foo'ですyour_array.push('123')

これはコミュニティの傾向を示しているだけで、何が「ベスト」かはあなた次第です。

詳細については、このブログ投稿をご覧ください。

于 2013-09-13T15:02:54.693 に答える
4

これは、quackingduck の例よりも 1 つ少ないメソッド呼び出しを使用する式です。

'%011d' % rand(1e10)

1 つの注意点は で1e10あり、Float最終的にそれKernel#randを呼び出すto_iことになるため、より高い値の場合、矛盾が生じる可能性があります。リテラルでより正確にするために、次のこともできます。

'%011d' % rand(10_000_000_000) # Note that underscores are ignored in integer literals
于 2008-10-06T18:52:13.017 に答える
3

最初の回答を変更したいだけです。rand (10**10)0 が 1 位の場合、9 桁のランダムな no が生成される場合があります。正確な10桁を確保するには、変更するだけです

code = rand(10**10)
while code.to_s.length != 10
code = rand(11**11)

終わり

于 2012-07-11T23:22:30.567 に答える
3

n桁の乱数を生成する最も簡単な方法 -

Random.new.rand((10**(n - 1))..(10**n))

10 桁の数字を生成する number -

Random.new.rand((10**(10 - 1))..(10**10))
于 2016-10-12T09:46:47.787 に答える
2

この手法は、あらゆる「アルファベット」で機能します。

(1..10).map{"0123456789".chars.to_a.sample}.join
=> "6383411680"
于 2015-06-25T07:19:11.157 に答える
2

以下の簡単な方法を使用してください。

rand(10 ** 9...10 ** 10)

以下の IRB でテストするだけです。

(1..1000).each { puts rand(10 ** 9...10 ** 10) }
于 2018-08-29T10:39:19.233 に答える
0

これは ruby​​ 1.8.7 でも動作します:

rand(9999999999).to_s.center(10, rand(9).to_s).to_i

于 2013-01-24T12:18:50.487 に答える