数字の桁数で条件分岐をしたいです。
もし、変数aが二桁だったら〜〜〜、一桁だったら〜〜〜といった具合に分けたいのですが、if文などでどのように書いたら良いでしょうか?
DrqYutoが👍を押しています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
2つの方法を書いてみました。
- log10()をつかって数字の桁数を求める
- 数字を文字列に変換して、文字列長さを求める
a.rb
ruby
1TESTS = [ 2 [0, 1], 3 [1, 1], 4 [9, 1], 5 [10, 2], 6 [99, 2], 7 [1234, 4], 8 [12345678901234567890, 20], 9 [-1, 1], 10 [-10, 2], 11 # [1.234, 1] # 小数は切捨ててから計算する? 12] 13 14def keta_01(num) 15 return 1 if num == 0 16 num *= -1 if num < 0 17 Math.log10(num).floor + 1 18end 19 20def keta_02(num) 21 num *= -1 if num < 0 22 "#{num}".length 23end 24 25TESTS.each do |test| 26 p "keta_01(#{test[0]}) -> #{keta_01(test[0])}" 27 # fail "keta_01(#{test[0]}) -> #{keta_01(test[0])}" if keta_01(test[0]) != test[1] 28end 29 30puts 31TESTS.each do |test| 32 p "keta_02(#{test[0]}) -> #{keta_02(test[0])}" 33 # fail "keta_02(#{test[0]}) -> #{keta_02(test[0])}" if keta_02(test[0]) != test[1] 34end
実行結果
$ ruby a.rb "keta_01(0) -> 1" "keta_01(1) -> 1" "keta_01(9) -> 1" "keta_01(10) -> 2" "keta_01(99) -> 2" "keta_01(1234) -> 4" "keta_01(12345678901234567890) -> 20" "keta_01(-1) -> 1" "keta_01(-10) -> 2" "keta_02(0) -> 1" "keta_02(1) -> 1" "keta_02(9) -> 1" "keta_02(10) -> 2" "keta_02(99) -> 2" "keta_02(1234) -> 4" "keta_02(12345678901234567890) -> 20" "keta_02(-1) -> 1" "keta_02(-10) -> 2"
投稿2016/04/14 21:46
総合スコア22324
0
桁数は「.length」を使えば取得できますので、こんな感じでいかがでしょう?
ruby
1a = "a" 2if a.length == 1 3 puts "hoge" 4elsif a.length == 2 5 puts "hogehoge" 6else 7 puts a.length 8end
投稿2016/04/14 02:06
編集2016/04/14 02:07総合スコア206
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/15 02:12